C语言中 局部指针变量传给函数参数的过程

最后打印的值是?请高手讲一下这个过程例如:注意这里*P是个局部变量fun(int*ptr){*ptr=11;}main{int*P;fun(P);printf(%d,&P... 最后打印的值是?请高手讲一下这个过程
例如:
注意这里*P 是个局部变量

fun(int *ptr)
{
* ptr =11;
}
main
{
int * P ;
fun(P);
printf(%d , &P);
}
展开
 我来答
风若远去何人留
2016-10-10 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450126
专业C/C++软件开发

向TA提问 私信TA
展开全部
没打印
直接挂掉
你的P没有初始化 是野指针
于是ptr的值也就是随机值
赋值*ptr导致野指针赋值,非法访问,挂掉。
追问
fun(int *ptr)
{
* ptr =11;
}
main
{
int * P ;
int a ;
P = &a; //就是说改成这样是OK的吗
fun(P);
printf(%d , &P);
}
追答

这样改可以

等效把a值改为11了

但是 打印的&P值,这个是一个地址值,随机。

要打印11,需要打印*p

代码有些编译错误 

修改如下

#include <stdio.h>
fun(int *ptr)
{
    * ptr =11;
}
int main()
{
    int * P;
   int a ;
   P = &a;   //就是说改成这样是OK的吗
    fun(P);
    printf("%d" , &P);//会是随机值
    printf("\n%d\n" , *P);//会是11
    
}
xiuluot
2016-10-10 · TA获得超过851个赞
知道小有建树答主
回答量:599
采纳率:66%
帮助的人:183万
展开全部
你的fun采用 传引用。是把这个参数的指针传送过去,然后修改该地址下面的数据。所以这个修改就相当于全局变量之类的。。。所以输出理论上是11。
不过一般指针定义的时候,要给一个初始值,或者初始地址。。。不然,开辟的地址就是个未知,你在这个未知的地址上面,进行修改他的值,很然后出现问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式