我有一个参数中有两个指针的函数。第一个指针(Position * x)指向一个具有值的结构,第二个指向什么都没有(Position * y)(它尚未初始化)。我尝试将我的第一个指针复制到第二个指针,然后从第二个指针打印出值,但它不起作用。我不明白。这是否意味着你可以改变指针的值而不是他的地址,因为实际上C语言总是按值运行(我的意思是在参数传递中)?
void waitDeplacement(Position *oldPosition, Position *newPosition, Sens *sens, Niveau *niveau)
{ ...
newPosition = oldPosition;
printf("NEW POSITION x:%d / y:%d\n", newPosition->x, newPosition->y);
...
}
旁边,当我使用深拷贝时:
*newPosition = *oldPosition;
它的工作原理。那么为什么请呢?
答案 0 :(得分:1)
指针复制指针在c中可用。但是对于常量指针,不允许复制.Line
仅当newPosition不是常量指针时, newPosition = oldPosition;
才有效。
当您执行newposition = oldPosition;
时,newPosition和oldPosition将指向相同的内存位置。
请显示您的代码,这有助于更好地了解问题。
答案 1 :(得分:0)
如果您熟悉这种语言,请确保所有内容都使用C语言。指针也是如此,但初学者的话题却相当复杂。你只需要更多地学习C语言。使用你最喜欢的书。
void foo(int *ptr1, int *ptr2, int **ptr3)
{
ptr1 = ptr2; // ptr1 == ptr2 only in the scope of foo
*ptr3 = ptr2; // changes the ptr3
}
int main()
{
int i = 1, j = 2, k = 3;
int *x = &i, *y = &j, *z = &k;
foo(x, y, &z);
printf("After the call:\n *x = %d, *y = %d, *z = %d\n\n", *x, *y, *z);
}
答案 2 :(得分:0)
感谢Peter_01和其他人,我已经解决了这个问题。
事实上,当你说指针指向一个指针的副本是本地的时,你就完全正确了。
这就是为什么当我把oldPosition放在newPosition中时,它实际上只是工作。
因为我的问题是我多次调用相同的waitDeplacement函数,每次调用函数外部oldPosition = newPosition
。
但由于newPosition = oldPosition
的副本不起作用且newPosition值等于{0, 0}
。我们最终发现oldPosition采用newPosition的值,这意味着0。
非常感谢你的帮助。