C语言中结构体变量名代表什么
比如structstudent{.....}A;那么单独一个A表示什么,是代表结构体A的首地址么,还是表示一整个A包含的一段内存的内容。...
比如
struct student
{
.....
}A;
那么单独一个A表示什么,是代表结构体A的首地址么 ,还是表示一整个A包含的一段内存的内容。 展开
struct student
{
.....
}A;
那么单独一个A表示什么,是代表结构体A的首地址么 ,还是表示一整个A包含的一段内存的内容。 展开
6个回答
展开全部
A就是个变量名嘛,就跟你定义了一个int x一样。
它的首地址要用&A取出来。
不要把它跟数组搞混了,一个数组,比如int b[10],
这里的b实际是一个指向数组首地址的指针,即:b = &b[0]
它的首地址要用&A取出来。
不要把它跟数组搞混了,一个数组,比如int b[10],
这里的b实际是一个指向数组首地址的指针,即:b = &b[0]
追问
那为什么这个可以运行。。。(真的可以运行。。。)
struct student *head,*p; (前面已定义struct)
head=&p; 一个地址怎么赋值到结构体变量上??
追答
head的类型是struct student*,就是说,head是一个指针,
具体一点说,它是一个指向struct student类型对象的指针,
p同理,也是一个指针。p这个指针变量也是一个变量,它在内存中也有自己的地址,
&p就是把p这个指针的地址拿出来,然后再赋给head.
当然,这个赋值是不合理的,因为head本来的合理的值应该是某个struct student的地址,
现在你却要把一个指针(准确一点,是struct student *)的地址赋给它。
不过,虽然不合理,赋值确实相容的。举个例子,赋值相容就是说,你也可以把一个double类型的值赋给一个int,当然这中间可能会造成精度损失,比如1.1赋过去以后就变成了1,赋值时发生了隐式的类型转化(double转成了int)。
说了那么一大段,意思就是,从语法的角度讲,head = &p并没有错。赋值时,实际上发生了隐式类型转化,把&p的类型(p是struct student*, &p就是struct student **)转化成了head自己的类型(struct student*)。
这个赋值仅仅是语法上可行,但千万不要这么用!程序运行起来很危险!!
说过你还不明白,我再说通俗一点:
有这么一个句子:男人是女人。
从语法的角度讲,它是对的,有主语有谓语有宾语,句子很完整。
但是他的语义显然不合理。
明白了吗?
展开全部
A是表示student结构体的所有内部内容的结构体变量。struct student{.....};只是一个“空架子”——样板。只有A才是和这个样板一模一样的“实体”。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
struct 结构体名
{
成员表列
}变量名表列;
A是一个结构体变量,在小程序中适用,一般大程序在使用的地方定义变量
{
成员表列
}变量名表列;
A是一个结构体变量,在小程序中适用,一般大程序在使用的地方定义变量
参考资料: C语言设计教程 谭浩强 著
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这句话相当于
struct student
{
.....
};
int main()
{
struct student A;
。。。。
struct student
{
.....
};
int main()
{
struct student A;
。。。。
追问
。。。我是问把A单独拿出来表示什么。。。不是说在那段话里表示什么。。。
追答
额,不表示什么啊,如果不再这段话里,只是一个普通的字符~没有特殊的意义,和BCDEFGHI...一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以理解成“一整个A包含的一段内存的内容”吧……
更多追问追答
追问
那如果是内容的话 为什么下面这段代码里的return里可以直接用head?
struct student*creat(void)
{
struct student *head,*p1,*p2;
p1=p2=(struct student*)malloc(LEN);
head。。。。
。。。
p2->next=NULL;
return(head);
}
追答
这里的head是指针啊……指针存储的当然是地址啊……但是前面的A不是指针,所以不是存储地址啊……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询