指针到指针的副本在C中不起作用

时间:2018-05-13 20:55:06

标签: c

我有一个参数中有两个指针的函数。第一个指针(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;

它的工作原理。那么为什么请呢?

3 个答案:

答案 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);
}

https://ideone.com/GN8IMg

答案 2 :(得分:0)

感谢Peter_01和其他人,我已经解决了这个问题。 事实上,当你说指针指向一个指针的副本是本地的时,你就完全正确了。 这就是为什么当我把oldPosition放在newPosition中时,它实际上只是工作。 因为我的问题是我多次调用相同的waitDeplacement函数,每次调用函数外部oldPosition = newPosition。 但由于newPosition = oldPosition的副本不起作用且newPosition值等于{0, 0}。我们最终发现oldPosition采用newPosition的值,这意味着0。 非常感谢你的帮助。