c语言,二重指针的赋值问题

为什么没有这一句程序就会崩溃呢,#include<stdio.h>intmain(){int**p;int*pt;inta=100;p=&pt;//为什么没有这一句程序就... 为什么没有这一句程序就会崩溃呢,
#include<stdio.h>
int main()
{
int **p;
int *pt;
int a=100;
p=&pt;//为什么没有这一句程序就会崩溃呢
*p=&a;
printf("%d\n",*p);
return 0;
}
展开
 我来答
XoriieInpottn
推荐于2018-02-28 · TA获得超过494个赞
知道小有建树答主
回答量:153
采纳率:100%
帮助的人:154万
展开全部
给你仔细分析下哈:

首先,指针p是个二重指针,说白了就是它的值是另外一个int型指针变量的地址

截止到你问的那行,现在我们已知a的值是100,假设a的地址是0x1290F54C,pt的地址是0x7FCA6513,pt的值未知(野指针,值是什么都有可能),p也是野指针

如果没有你注释的那一句,*p意味着要取p指向变量的内容,刚刚说了,p是野指针,那么给野指针取内容当然要崩溃

怎么让p不是野指针呢?先给p赋值就行了,但是要记住,p是二重指针,指向的类型必须是某个int指针的地址,所以初始p就这么写:p=&pt;

你就记住,指针本质上就是整型变量,只不过它里面的整数代表地址,可以取对应地址的内容。

而且,如果你想输出a的值printf("%d\n",*p);是不行的,这个输出的是a的地址的10进制形式。
输出a的值应该是printf("%d\n",**p);
输出地址最好用16进制printf("%x\n",*p);
F__Horizon
2016-01-01 · TA获得超过1.4万个赞
知道小有建树答主
回答量:1929
采纳率:83%
帮助的人:173万
展开全部
首先,指针p是个二重指针,说白了就是它的值是另外一个int型指针变量的地址

截止到你问的那行,现在我们已知a的值是100,假设a的地址是0x1290F54C,pt的地址是0x7FCA6513,pt的值未知(野指针,值是什么都有可能),p也是野指针

如果没有你注释的那一句,*p意味着要取p指向变量的内容,刚刚说了,p是野指针,那么给野指针取内容当然要崩溃

怎么让p不是野指针呢?先给p赋值就行了,但是要记住,p是二重指针,指向的类型必须是某个int指针的地址,所以初始p就这么写:p=&pt;

你就记住,指针本质上就是整型变量,只不过它里面的整数代表地址,可以取对应地址的内容。

而且,如果你想输出a的值printf("%d\n",*p);是不行的,这个输出的是a的地址的10进制形式。
输出a的值应该是printf("%d\n",**p);
输出地址最好用16进制printf("%x\n",*p);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Iinux
2014-08-23 · TA获得超过327个赞
知道答主
回答量:67
采纳率:100%
帮助的人:75.4万
展开全部
错误处:*p = &a;

你的int **p; 正如楼上所讲的那样,p没有指向一个空间。

1)比如:
int *pt;
*pt = 10;
这个你可能一看就知道错了。因为pt没有开辟空间。*pt为在这个空间里面存东西。
2)再如:
int a = 10;
int **p;
*p = &a;
这个不是一样的原理吗?*p在这个空间里面存东西合理吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shine1991
科技发烧友

2014-08-23 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部

没有语句p=&pt;

导致指针p始终是一个野指针,其指向的是一个随机的空间地址,对这个地址的内容进行修改,当然会导致问题

更多追问追答
追问
为什么会是野指针?
有*p=&a了为何还是野指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
康壳天然卷
2014-08-23 · TA获得超过229个赞
知道小有建树答主
回答量:299
采纳率:96%
帮助的人:71.3万
展开全部
亲测没这句也是可以的,不过是你输出的时候少了个*号,导致输出的是地址值而不是100这个数。#include<stdio.h>
int main()
{
int **p;
int a=100;
*p=&a;
printf("%d\n",**p);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式