C 如何使用函数更改变量的地址?
我试图用一个函数来改变某个变量的地址,但我不知道怎么做。。。然而,我的目标是:C 如何使用函数更改变量的地址?,c,memory-address,C,Memory Address,我试图用一个函数来改变某个变量的地址,但我不知道怎么做。。。然而,我的目标是: void address (int* x, int* y) { x = y; } int main(void) { int x = 2; int y = 4; address(&x, &y); printf("%d", x); return 0; } 我猜你想要 void address (int* x, int* y) { *x = *
void address (int* x, int* y)
{
x = y;
}
int main(void)
{
int x = 2;
int y = 4;
address(&x, &y);
printf("%d", x);
return 0;
}
我猜你想要
void address (int* x, int* y)
{
*x = *y;
}
尽管你问题的措辞很糟糕
如果我误解了,您真的希望能够更改变量的地址,那么您就不能。变量的地址不是可以更改的附加到变量的信息。变量的地址就是变量。它的名字只是为了人类的方便
更多答案
main中的x和y是位于0x1234和0x1236的int,然后调用函数。它碰巧有两个参数,称为x和y,它们实际上与main中的x和y没有关联。这些参数是指向整数的指针,其中包含2个整数的地址。在你的情况下,干线的x和y
我将把干线x和y叫做main.x和main.y。我将调用funcs x和y func.x和func.y
所以func.x=0x1234,func.y=0x1236。你可以用这些做任何你想做的事,是吗
func.x = func.y
好了,现在func.x的原始值丢失了,它的值是func.y。现在两者的地址都是main.y。好的,这会改变main.x和main.y的任何方面
摆弄指针不会改变它们指向的东西,它只是让它们指向不同的东西
像这样想。在C程序中
int x
意味着分配一个4字节长的变量,并记住它的地址,我将该地址称为“x”。在编程的早期(旧的汇编程序等),您必须编程如下
thing at 0x1234 = 42;
thing at 0x1236 = thing at 0x1234 + 2;
等等(你确实说了‘thing at’,你有一些特定于cpu的指令,但这是同一件事),这是编译器的主要任务之一,允许你调用内存区域‘count_of_mice’或‘size_of_planet’,因为它真的很难读取只有数字的代码,我怀疑你想要
void address (int* x, int* y)
{
*x = *y;
}
尽管你问题的措辞很糟糕
如果我误解了,您真的希望能够更改变量的地址,那么您就不能。变量的地址不是可以更改的附加到变量的信息。变量的地址就是变量。它的名字只是为了人类的方便
更多答案
main中的x和y是位于0x1234和0x1236的int,然后调用函数。它碰巧有两个参数,称为x和y,它们实际上与main中的x和y没有关联。这些参数是指向整数的指针,其中包含2个整数的地址。在你的情况下,干线的x和y
我将把干线x和y叫做main.x和main.y。我将调用funcs x和y func.x和func.y
所以func.x=0x1234,func.y=0x1236。你可以用这些做任何你想做的事,是吗
func.x = func.y
好了,现在func.x的原始值丢失了,它的值是func.y。现在两者的地址都是main.y。好的,这会改变main.x和main.y的任何方面
摆弄指针不会改变它们指向的东西,它只是让它们指向不同的东西
像这样想。在C程序中
int x
意味着分配一个4字节长的变量,并记住它的地址,我将该地址称为“x”。在编程的早期(旧的汇编程序等),您必须编程如下
thing at 0x1234 = 42;
thing at 0x1236 = thing at 0x1234 + 2;
等等(你确实说了“thing at”,你有一些特定于cpu的指令,但这是同一件事),这是编译器的主要任务之一,允许你调用一个内存区域“count_of_mice”或“size_of_planet”,因为它真正难以读取的代码只有数字
我试图使用函数更改某个变量的地址
答案是:你不能。正如注释中指出的,地址是物理属性的抽象。变量在内存中保留空间,并且只有一个变量可以占用给定的空间(在今天存在的体系结构上)
如果您的意思是要将两个包含地址(也称为指针
)的变量的值更改为包含不同的值,则需要将变量声明为指针,并且函数需要接受指向指针的指针。例如:
void address (int** x, int** y)
{
*x = *y;
}
int main(void)
{
int x = 2;
int y = 4;
int *px = &x; // px points to x
int *py = &y; // py points to y
address(&px, &py);
printf("%d", px);
return 0;
}
我试图使用函数更改某个变量的地址
答案是:你不能。正如注释中指出的,地址是物理属性的抽象。变量在内存中保留空间,并且只有一个变量可以占用给定的空间(在今天存在的体系结构上)
如果您的意思是要将两个包含地址(也称为指针
)的变量的值更改为包含不同的值,则需要将变量声明为指针,并且函数需要接受指向指针的指针。例如:
void address (int** x, int** y)
{
*x = *y;
}
int main(void)
{
int x = 2;
int y = 4;
int *px = &x; // px points to x
int *py = &y; // py points to y
address(&px, &py);
printf("%d", px);
return 0;
}
变量的地址是其识别特征之一。您不能更改变量的地址,正如您不能更改1的值一样
或者这里有另一个类比:假设我把我的街道地址写在一张纸条上,“99 JB巷”,然后给你。你可以用那张纸帮你参观我家。你甚至可以选择改变我的房子,比如说耙树叶。现在假设你把纸上的“99”涂掉,换成“42”。你不能那样改变我的实际房子号码,也不能那样使我的房子和我邻居的房子成为同一所房子。但是,如果“42 JB Lane”恰好是一个有效地址,那么你可以使用该文件访问那里的房子
函数address()
接收到的参数值就像我给你的纸条:它们告诉函数在哪里找到两个变量的值,甚至允许它修改这些值,但函数不能使用它们来更改值为的变量的标识