h-b-z-d-j-s-m 发表于 2022-10-12 15:01:28

指针

https://s1.ax1x.com/2022/10/12/xUwfij.jpg
为什么是0,0

jackz007 发表于 2022-10-12 15:16:50

本帖最后由 jackz007 于 2022-10-12 15:27 编辑

      原因是 fun() 传送计算结果的方式是无效的
void fun(int * p1 , int * s)
{
      int * t                           ;
      t = (int *) malloc(2 * sizeof(int)) ;
      * t = * p1 + * p1 ++                ; // t = p1 + p1
      * (t + 1) = * p1 + * p1             ; // t = p1 + p1
      s = t                               ; // s 是局部变量,这个修改无效,也就是说,这种传送计算结果的方式无效
}
      改成这样就好了:
void fun(int * p1 , int * s)
{
      * s = * p1 + * p1 ++                ; // s = p1 + p1
      * (s + 1) = * p1 + * p1             ; // s = p1 + p1
}
       就是说,我们应该修改参数指针所指向内存中的数据,而不是指针参数本身的数值。只有这样,才能把计算结果带出函数。

两手空空儿 发表于 2022-10-12 15:37:11

本帖最后由 两手空空儿 于 2022-10-12 15:41 编辑

局部变量只在函数内部有效,在函数fun(int *p1, int *s)内 , p1,s,t都是fun的局部变量,对p1【指向的值】进行了读取操作,对s和t进行了写入操作,这里只改写了S这个【变量的值】,对S原来指向的内存单元没有改动,所以对于数组a[]和b[]没有任何变化
如果 s = t, s = t 那么数组b[]内元素的值就有了变化。
页: [1]
查看完整版本: 指针