C中的指针内部功能

时间:2014-11-17 10:42:31

标签: c pointers

#include<stdio.h>

int q = 10;

void fun(int *p){
    *p = 15;
    p = &q;
    printf("%d ",*p);
}    

int main(){
  int r = 20;
  int *p = &r;  
  fun(p);
  printf("%d", *p);
  return 0;
}

我正在玩指针。无法理解这个的输出。 输出为10 15。 一旦p指向q的地址,为什么在返回主函数时它的值会发生变化?也为什么它改变了价值&#39; 15&#39;在&#39; 10&#39;之前的功能中分配给它。

3 个答案:

答案 0 :(得分:5)

p fun() pmain()中的p不同。每个函数中的{{1}}都是本地的。所以改变一个不会影响其他人。

答案 1 :(得分:4)

在C中,所有函数参数都按值传递,包括指针。

*p = 15; r设置为15,因为*p指的是rmain()占用的内存它重新分配到&q;

您的重新分配p = &q; 会更改p在呼叫者main()中指向的内容。要做到这一点,您需要加倍间接指针,即将函数原型更改为void fun(int **p){,使用fun(&p);调用它,然后使用*p = &q;重新分配。

答案 2 :(得分:1)

两个步骤:

  1. 首先致电fun(),将全局int q [保留值10]的地址分配到功能范围内的p 并打印。第一个输出==&gt; 10;

  2. 一旦呼叫从fun()返回,它将保留先前的地址[从main()传递],因此将打印该地址所持有的值[{1 },在15]内修改。