void change _ prt();
main()
{
int * prt,b[3] = {1,2,3};
prt = b;
change _ prt(prt);
printf("%d\n", * prt);
}
void change _ prt(p)
int * p;
{ p+=2;
}
为什么结果是1,而不是3?
谢谢。
C语言指针移动后指向问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- 幻夢之葉 2015-02-12 05:36关注
你这代码一堆错误,能编译通过?
void change_prt(int ** p); int main() { int *prt,b[3] = {1,2,3}; prt = b; change_prt(&prt); printf("%d\n", * prt); return 0; } void change_prt(int **p) { p+=2; }
至于结果为什么不是3
指针可以通过修改它指向的内容
但是你这里是修改指针本身的值(如32位机子下,指针是32位的地址,你只是修改了地址值而不是该指针指向的内存)
在这里来说指针值只是个值传递,会拷贝临时变量的,所以对参数p来说,p的值没有改变
但是
void change _ prt(int * p)
int * p;
{
*p = 10; // p的值也是没有改变的,只是改变了它指向的内存,以前的内存值1,现在是10
}我修改后的代码,就是把该b头元素地址也昨晚一个指针。
就比如,你有一个文件F,在其他地方生成一个快捷方式S1,你用S1打开文件修改内容并保存,
在原始文件列表再打开F,看到的是修改后的内容现在的参数就相当于这个快捷方式S1传进去,生成一个临时变量S2,你在其中修改S2指向的路径,那跟S1完全没有关系
(S1快捷方式还是指向你的文件F)不知道是否明白。
修改后的代码,就是再F,S1,在加一个快捷方式SS1指向S1...
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥15 js调用html页面需要隐藏某个按钮
- ¥15 ads仿真结果在圆图上是怎么读数的
- ¥20 Cotex M3的调试和程序执行方式是什么样的?
- ¥20 java项目连接sqlserver时报ssl相关错误
- ¥15 一道python难题3
- ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
- ¥15 牛顿斯科特系数表表示
- ¥15 arduino 步进电机
- ¥20 程序进入HardFault_Handler
- ¥15 oracle集群安装出bug