如何不陌路 2015-02-12 05:03 采纳率: 100%
浏览 2397
已采纳

C语言指针移动后指向问题

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?
谢谢。

  • 写回答

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...

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥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