这就是我想要实现的目标。 内部指针' 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
答案 0 :(得分:2)
当你调用函数moveforward时,r的指针地址不会改变。 moveforward(R); 在调用moveforward之后,r的地址还没有改变。 所以如果你执行 printf(“移动后的p值:%p \ n”,r);
r的地址仍未改变。
如果你想得到你期望的价值,你应该这样做: printf(“移动后的p值:%p \ n”,* r);
答案 1 :(得分:1)
这是在进行任何指针算术之前的事情。
执行 moveforward(r); 后,事情就是这样:
这些是指针值:
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)的内容保持不变。