我正在尝试使用函数更改某个变量的地址,但我不知道如何做到这一点......不过这是我的去处:
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;
}
答案 0 :(得分:3)
我正在尝试使用函数
更改某个变量的地址
答案是:你做不到。正如评论中所指出的,the address is an abstraction of a physical property
。变量在内存中占有空间,只有一个变量可以占用给定的空间(在当今存在的体系结构中)。
如果你想改变两个包含地址的变量的值(也称为pointers
)来保存不同的值,你的变量需要被声明为指针,你的函数需要接受指针指针。例如:
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 :(得分:2)
我怀疑你想要
void address (int* x, int* y)
{
*x = *y;
}
即使您的问题的措辞很差。
如果我误解了你真的希望能够改变变量的地址,你就不能。变量的地址不是附加到可以更改的变量的信息。变量的地址是变量。它的名字只是人的便利。
更多回答
main中的x和y是in,例如0x1234和0x1236然后你调用你的函数。碰巧有两个名为x和y的args,这些与main中的x和y并不真正相关。这些args是指向int的指针,包含2个int的地址。在你的情况下主电源'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;
等。 (你实际上说'你在'你有一些cpu特定的指令,但它是相同的东西),这是编译器的主要工作之一,允许你调用内存区域'count_of_mice'或'size_of_planet', cos它真正难以阅读的代码只有数字
答案 2 :(得分:0)
变量的地址是其识别特征之一。您不能更改变量的地址,只能更改值1。
或者这是另一个类比:假设我在一张纸上写下我的街道地址,“99 JB Lane”,然后把它给你。您可以使用该纸帮助您访问我的房子。你甚至可以选择改变我的房子,比如耙树叶。现在假设你在纸上涂抹“99”并用“42”替换它。你不是那样改变了我的实际门牌号,你也不能以这种方式让我的房子和我的邻居家成为同一栋房子。但是,如果“42 JB Lane”恰好是一个有效的地址,那么您可以使用该文件访问那里的房子。
函数address()
收到的参数值就像我给你的纸条:它们告诉函数在哪里找到两个变量的值,甚至启用它来修改那些值,但函数不能使用它们来更改其值存储在这些地址的变量的标识。