c语言再申明了结构体变量指针后为什么还要给指针动态分配存储单元
5个回答
展开全部
这是指针使用必须的步骤,无论是结构体指针还是普通变量指针,在声明后,都要为它分配内存单元,不然的话,就是空指针,
更多追问追答
追问
可是C语言里说申明一个变量的同时就已经给变量分配了一个内存单元,再继续用动态分配存储单元似乎有些多余。
追答
对变量是分配了内存单元,我说的是普通类型变量指针:
int a; //分配了内存单元
int *b; //没有分配内存单元
如果要使用b,有两种方法
第一申明的时候分配一个int 类型指针的地址:
int c;
int *b = &c;
第二
int *b;
b = (int *)malloc(sizeof(int));
同样的 结构体同样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题,和下面的问题,其实相同:
int a, *pi;
pi = &a; // pi 是变量 a的地址
*pi = 3; // 通过a的地址,间接操作a,相当于 a = 3;
第二行代码可以省略不??如果省略了,那么 pi 放的是谁的地址呢??甲的地址,还是乙的地址,还是,丙的地址?、我们完全不知道啊,,如果是你老板的地址,第三行代码,你敢随便操作你的老板不?、、很危险,相当危险了、、
lz问的那个问题,其实是一样的、指针指的东西,要存在,而且是确定你可以操作的;否则,那后果就不堪设想, are you understand ?
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; // 赋值后,他就确定了,在我们掌控之中了、、
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-03-31
展开全部
因为指针要指向所声明的类型的地址.(指针本身也有地址,)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询