C语言中结构体变量名代表什么

问题描述:

C语言中结构体变量名代表什么
比如
struct student
{
.
}A;
那么单独一个A表示什么,是代表结构体A的首地址么 ,还是表示一整个A包含的一段内存的内容.
1个回答 分类:综合 2014-12-04

问题解答:

我来补答
A就是个变量名嘛,就跟你定义了一个int x一样.
它的首地址要用&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*)。 这个赋值仅仅是语法上可行,但千万不要这么用!程序运行起来很危险!! 说过你还不明白,我再说通俗一点: 有这么一个句子:男人是女人。 从语法的角度讲,它是对的,有主语有谓语有宾语,句子很完整。 但是他的语义显然不合理。 明白了吗?
 
 
展开全文阅读
剩余:2000
下一页:明矾净水