C语言结构体变量名究竟代表什么 5

#include<stdio.h>typedefstructstudentSTU;structstudent{char*name;char*num;structstude... #include <stdio.h>
typedef struct student STU;
struct student
{
char *name;
char *num;
struct student *next;
};

int main()
{
STU st1;
STU st2;
st1.next = &st2; //如果把这句换成st2就会报错
printf("%d\n%d\n",st2,&st2); //但是输出的st2和&st2的值是一样的,这怎么理解
return 0;
}
展开
 我来答
百度网友2018359
2017-08-08 · TA获得超过3494个赞
知道大有可为答主
回答量:3486
采纳率:73%
帮助的人:1442万
展开全部

输出的值并不一样

st1.next=&st2;  这句, next是定义的一个指向struct student结构体的指针, 也就是说只能是一个地址值赋给它, 所以要用取地址符&来取得st2这个结构体的地址. 当然如果你前面定义的是STU* st1;  STU* st2; 又不一样

chiconysun
2017-07-21 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2607万
展开全部
这个运行环境应该是很旧的C语言吧,准确地说,结构体变量名代表的是存储结构体成员的那个一大块空间,因此后面的输出准确地说是有逻辑错误的
因为next是结构体指针类型,所以前面只能被赋值为结构体变量的地址,需要&
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
络羽丿
2013-08-12
知道答主
回答量:5
采纳率:0%
帮助的人:7227
展开全部
结构体变量名称其实就是指你用结构体定义出的这种类型,相当int,char,float这些。我们管int char float这些叫做内置类型,而自己用结构体定义的类型叫自定义类型。
st1.next = &st2; //如果把这句换成st2就会报错 这里肯定会报错,因为st1.next的类型是STU*(结构体指针)类型,而st2是STU(自定义结构体)类型,不同类型赋值自然会报错。
printf("%d\n%d\n",st2,&st2); //但是输出的st2和&st2的值是一样的,这怎么理解 其实这里你以%d输出 st2和&st2 的结果都是以整数形式解释并输出了st2的地址,故相同
追问
st2代表什么,为什么st2和&st2的值是一样的
追答
st2在不同地方代表不同意义,比如STU st2中,st2代表声明一个STU型变量st2,而在 printf("%d\n%d\n",st2,&st2);   中,st2代表变量st2占用空间的首地址,而&st2代表取变量st2空间的地址,他们在数值上是相等的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-06-19
展开全部
next是指针,所以要取地址
结构体不是用%d输出的。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tt静水深流
2017-08-14 · TA获得超过190个赞
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:63.1万
展开全部
st2和&st2相同纯属巧合,因为你的结构体第一个变量为char* ,如果你的结构体变量第一个为int型,st2为结构体第一个变量的值,&st2为结构体第一个变量地址就不一样了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(10)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式