指向C中指针问题的指针

时间:2017-03-22 01:23:47

标签: c

这就是我想要实现的目标。 内部指针' r'我有指针的地址' p'现在我尝试通过调用函数moveforward()使用指针运算来移动' p'(这是一个地址)的值。  我收到这个错误:

这里有什么问题?虽然处理指针指针有点复杂。

void value not ignored as it ought to be
movingresult=moveforward(r);

我刚刚更改了我的代码,所以现在它看起来像这样,一切运行良好,但结果不是我所期望的。

#include <stdio.h>

void moveforward(int** y) {
     *y = *y+1;
     printf("value of *y in function : %p\n",*y);

}


int main () {
int a = 16;
int *p;
int **r;
p = &a;
r = &p;
int **movingresult;

printf("Value of p before moving :%p\n",p);
movingresult=moveforward(r);
printf("Value of p after moving :%p",movingresult);

return 0;

}

我的期望:&#39; p&#39;移动后必须等于* y,即0x7fffa5a1c188

2 个答案:

答案 0 :(得分:2)

当你调用函数moveforward时,r的指针地址不会改变。 moveforward(R); 在调用moveforward之后,r的地址还没有改变。 所以如果你执行 printf(“移动后的p值:%p \ n”,r);

r的地址仍未改变。

如果你想得到你期望的价值,你应该这样做: printf(“移动后的p值:%p \ n”,* r);

答案 1 :(得分:1)

这是在进行任何指针算术之前的事情。

This is how things look before moving the pointer

执行 moveforward(r); 后,事情就是这样:

After moving the pointer

这些是指针值:

printf("Address pointed by p :%p\n",p); // Prints 0x7fffa5a1c188
printf("Address pointed by p :%p\n",*r); // Prints 0x7fffa5a1c188
printf("Address pointed by r :%p\n",r); // Prints 0x7fffa5a1c178

这是因为,当您执行以下代码时,

void moveforward(int** y) {
*y = *y+1;
printf("Value of *y now has been moved to : %p\n",*y);
}

只有指针p的内容递增(0x7fffa5a1c184到0x7fffa5a1c188)。但是指针r(0x7fffa5a1c178)的内容保持不变。