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;
} 展开
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;
} 展开
展开全部
这个运行环境应该是很旧的C语言吧,准确地说,结构体变量名代表的是存储结构体成员的那个一大块空间,因此后面的输出准确地说是有逻辑错误的
因为next是结构体指针类型,所以前面只能被赋值为结构体变量的地址,需要&
因为next是结构体指针类型,所以前面只能被赋值为结构体变量的地址,需要&
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结构体变量名称其实就是指你用结构体定义出的这种类型,相当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的地址,故相同
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输出的。。。
结构体不是用%d输出的。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
st2和&st2相同纯属巧合,因为你的结构体第一个变量为char* ,如果你的结构体变量第一个为int型,st2为结构体第一个变量的值,&st2为结构体第一个变量地址就不一样了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询