明白指针的帮看看好么 谢谢各位好心的帅哥了

来源:百度知道 编辑:UC知道 时间:2024/06/25 12:40:24
#include "stdio.h"

void fun(int *p)
{
int a=10;
p=&a;
++a;

}

void main()
{
int a=5;
fun(&a);
printf("%d\n",a);

}

我用程序走过 是 5;
为啥我感觉是 11呢

看你的说法,你暂时可能没有办法理解这个问题

函数传参的时候,为参数创建了副本,比如叫 int *_p 【_p代替p在函数中进行操作】
int a=10;
p=&a;
++a;
这些都是针对_p的,没有对p进行修改,所以结果是5

可以将fun执行的操作结果以返回值形式返回

执行到fun(&a)时候
p=&a
然后你在自定义函数fun中又定义了一个值a=10
让指针p指向这个a了
对主函数中的a没有影响
原样输出5

void fun(int *p)
{
int a=10;
p=&a;
++a;
}
这里的a是局部变量,只在fun()中起作用,当fun(&a)调用结束时,其生命也结束了,和主函数中的a不是一个变量的,这也是结果是5的原因。

指针作为形参在函数执行完成以后就被释放掉了,若想要改变指针所指向的地址的需要将形参声明为int** p;
因此fun(&a)操作不会对main函数中的a有影响。
若想要得到11的结果可以用这种方式:
#include "stdio.h"

void fun(int** p)
{
int a=10;
*p=&a;
++a;
}

void main()
{
int a=5;
int* p = &a;
fun(&p); //传递的是a的地址
printf("%d\n",*p);
}

因为上面的函数是void ~即无返回值函数!!