c语言再申明了结构体变量指针后为什么还要给指针动态分配存储单元

 我来答
明净还清新丶板栗2268
推荐于2016-10-14 · TA获得超过264个赞
知道小有建树答主
回答量:468
采纳率:0%
帮助的人:206万
展开全部
a;
int b;
}*a;
//之前这段代码只是定义一个结构体指针,并没有初始化,有可能指向NULL,也有可能指向其它未知地址,这时直接操作指针就是操作指针所指向的内存,这块内存有只能是系统区的,有可能在常量区的,反正就是本程序不应该访问的内存,所以内存错误。
要给指针分配空间后,才可以用指针进行操作
分配空间一种是定义这样一个结构体变量,再把指针指向其地址
二种是手动malloc一个区域
分配了空间再执行指针操作,就不会出这样的内存错误了
程小游
2011-03-31
知道答主
回答量:40
采纳率:0%
帮助的人:31.2万
展开全部
这是指针使用必须的步骤,无论是结构体指针还是普通变量指针,在声明后,都要为它分配内存单元,不然的话,就是空指针,
更多追问追答
追问
可是C语言里说申明一个变量的同时就已经给变量分配了一个内存单元,再继续用动态分配存储单元似乎有些多余。
追答
对变量是分配了内存单元,我说的是普通类型变量指针:
int a; //分配了内存单元
int *b; //没有分配内存单元
如果要使用b,有两种方法
第一申明的时候分配一个int 类型指针的地址:
int c;
int *b = &c;
第二
int *b;
b = (int *)malloc(sizeof(int));
同样的 结构体同样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
俎静皖9f
2011-03-31 · TA获得超过721个赞
知道小有建树答主
回答量:68
采纳率:100%
帮助的人:103万
展开全部
这个问题,和下面的问题,其实相同:

int a, *pi;
pi = &a; // pi 是变量 a的地址
*pi = 3; // 通过a的地址,间接操作a,相当于 a = 3;

第二行代码可以省略不??如果省略了,那么 pi 放的是谁的地址呢??甲的地址,还是乙的地址,还是,丙的地址?、我们完全不知道啊,,如果是你老板的地址,第三行代码,你敢随便操作你的老板不?、、很危险,相当危险了、、

lz问的那个问题,其实是一样的、指针指的东西,要存在,而且是确定你可以操作的;否则,那后果就不堪设想, are you understand ?
更多追问追答
追问
你意思是说申明指针变量,只是给了指针一个内存空间,但是里面并没有内容。
追答
那个,int * pi;
不仅是声明,而且是定义,定义的意思,就是会给他pi分配个房间,那个,房间里面本来住的是谁,我们不知道;什么叫赋值??赋值,就是把原来房间里的人轰出去,然后让新人住进去;
understand??
内存空间里面,一定会有东西,至于是什么东西刚开始我们并不清楚:
int a; // a 里面是什么?、不确定
a = 3; // 赋值后,他就确定了,在我们掌控之中了、、
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
iuv呵呵呵
2023-11-27
知道答主
回答量:1
采纳率:0%
帮助的人:159
展开全部

因为这个兄弟,你找到答案了吗?

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-31
展开全部
因为指针要指向所声明的类型的地址.(指针本身也有地址,)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式