首页 > 编程语言 > 详细

C类语言学习中的随笔

时间:2019-10-08 21:10:33      阅读:92      评论:0      收藏:0      [点我收藏+]

刷OJ时碰到这样的问题,访问结构体中数组的问题。

在网上查资料学到了这样的一些知识:

  • 结构体中成员的地址是相对于结构体整个地址的相对地址。
  • 访问结构体中的数组名时,是获取数组的相对地址,而访问指针成员的时候,是获取指针所指向地址中的内容。
  • %x,16进制。
  • 直接printf(s->a)的话,程序会crash(s->a为访问数组名,返回值应该是16进制的数组的地址,并且是相对于整个结构体的相对地址。),访问元素地址是一定不会挂掉的,&s->a,运算优先级,不需要加()
  • 关于长度为0的数组,例如: char a[0],声明这类数组的目的,是我们为了给这个数组分配一块连续的地址,如果单纯使用指针,分配到的地址可能是不连续的。这样的意义有两个:1)方便内存释放,我们所有分配的内存是在一起的。2)提高访问内存的速度,估计提升不是很大,因为都是根据偏移量寻址去访问其中的内容。3)可以减少一些内存碎片。
  • 获取指针所指向的数组长度:用sizeof(p)/sizeof(int),仔细一想,这特么怎么算都是1啊。

 

gdb的命令

  • a 为结构体,p a可以输出结构体地址,p *a可以输出整个结构体中各个成员的地址,p a->b 可以输出结构体中元素的内容以及地址。
  • x /10b a 输出分配给该结构体10个字节的内容。

C类语言学习中的随笔

原文:https://www.cnblogs.com/dzhx/p/11637589.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!