结构名是什么?

nasa4836 2009-10-29 09:07:45
struct a{
...
};
struct a ex;


当出现这句话,编译器在内存中按结构中的成员类型开辟一组空间.那么这个结构名ex在内存中如何被处理? 是开辟个空间,名字叫ex?里面的值应该放什么?
...全文
364 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
phpjspasp 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hpsmouse 的回复:]
引用 9 楼 nasa4836 的回复:
访问数组元素时,根据数组名+偏移来寻址.数组名是编译器另外开辟空间存放的.那么结构名是否有类似情况呢?上面有位说在链接时就换成地址.那对于运行过程中才创建的结构型变量呢?链接时可不知具体地址.

谁告诉你“数组名是编译器另外开辟空间存放的”?回去鄙视TA。
[/Quote]
同意
2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 nasa4836 的回复:]
访问数组元素时,根据数组名+偏移来寻址.数组名是编译器另外开辟空间存放的.那么结构名是否有类似情况呢?上面有位说在链接时就换成地址.那对于运行过程中才创建的结构型变量呢?链接时可不知具体地址.
[/Quote]
谁告诉你“数组名是编译器另外开辟空间存放的”?回去鄙视TA。
arong1234 2009-10-29
  • 打赏
  • 举报
回复
要真理解这个,你必须学习汇编,只有学了汇编,才会知道啥叫地址。
arong1234 2009-10-29
  • 打赏
  • 举报
回复
动态分配的本来就不需要知道他地址,只有在分配时才需要知道。编译程序只需要知道指针变量的地址即可
[Quote=引用 9 楼 nasa4836 的回复:]
访问数组元素时,根据数组名+偏移来寻址.数组名是编译器另外开辟空间存放的.那么结构名是否有类似情况呢?上面有位说在链接时就换成地址.那对于运行过程中才创建的结构型变量呢?链接时可不知具体地址.
[/Quote]
nasa4836 2009-10-29
  • 打赏
  • 举报
回复


访问数组元素时,根据数组名+偏移来寻址.数组名是编译器另外开辟空间存放的.那么结构名是否有类似情况呢?上面有位说在链接时就换成地址.那对于运行过程中才创建的结构型变量呢?链接时可不知具体地址.
TADICAN 2009-10-29
  • 打赏
  • 举报
回复
我只想说,变量名都会被转换为一个偏移地址(以数字形式存在),然后插入到代码里面去。
2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nasa4836 的回复:]
那么数组情况呢?数组名是否被另开辟空间.名字为数组名,存放首地址元素?
[/Quote]
只有一段连续的空间,存放数组的各个元素,没有别的。
2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nasa4836 的回复:]
那如是我是这样表达:ex.a(a是其中一成员),如果说没有名字,那怎么去识别.即使没有这个结构名.也应该创造一个标记来代替吧.但这样不如直接用结构名.
[/Quote]
“不如直接用结构名”这个纯粹是你个人的美好心愿,事实上从计算机的角度看是用结构名不如用地址。不要忘了地址是一个数字,结构名是一堆数字(一切都是数字),用一个数字定位比用一堆数字定位要简单得多。
nasa4836 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 phpjspasp 的回复:]
引用 2 楼 nasa4836 的回复:
引用 1 楼 arong1234 的回复:
名字不会出现在编译后的程序中,他只是为了方便你编程,内存中是没有的。


那如是我是这样表达:ex.a(a是其中一成员),如果说没有名字,那怎么去识别.即使没有这个结构名.也应该创造一个标记来代替吧.但这样不如直接用结构名.

在链接的时候,名字都会换成逻辑地址了。ex.a也被替换成地址了。有了地址,就能访问了。
[/Quote]

那么数组情况呢?数组名是否被另开辟空间.名字为数组名,存放首地址元素?
phpjspasp 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nasa4836 的回复:]
引用 1 楼 arong1234 的回复:
名字不会出现在编译后的程序中,他只是为了方便你编程,内存中是没有的。



那如是我是这样表达:ex.a(a是其中一成员),如果说没有名字,那怎么去识别.即使没有这个结构名.也应该创造一个标记来代替吧.但这样不如直接用结构名.
[/Quote]
在链接的时候,名字都会换成逻辑地址了。ex.a也被替换成地址了。有了地址,就能访问了。
东大坡居士 2009-10-29
  • 打赏
  • 举报
回复
ex代表的是一个地址,就是这个结构的首地址,取其成员就是首地址加上偏移
nasa4836 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
名字不会出现在编译后的程序中,他只是为了方便你编程,内存中是没有的。
[/Quote]


那如是我是这样表达:ex.a(a是其中一成员),如果说没有名字,那怎么去识别.即使没有这个结构名.也应该创造一个标记来代替吧.但这样不如直接用结构名.
arong1234 2009-10-29
  • 打赏
  • 举报
回复
名字不会出现在编译后的程序中,他只是为了方便你编程,内存中是没有的。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧