字符数组里存放整形,对数组名做加法
例如char buf[4]={1,2,3}
char *p = buf+1
这里buf+1的话地址应该是增加数组类型的长度,也就是1位,但是里面数组成员的类型是整形,那么每个成员应该占4位内存?
那为什么p指针的内容是2呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
例如char buf[4]={1,2,3}
char *p = buf+1
这里buf+1的话地址应该是增加数组类型的长度,也就是1位,但是里面数组成员的类型是整形,那么每个成员应该占4位内存?
那为什么p指针的内容是2呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
数组的成员类型其实是字符,只是显示的形式是整形罢了
字符可以说是小整形, 每一个字符都对应一个数值。 只是他们的显示方式不一样。
你那1,2,3就是当做char存的,再说你存什么也不能改变变量的属性
回复 4# sparkzh
他的 1 2 3是当整数值存的 等于 '\1' '\2' '\3'
buf+1
数组是具备指针特性的,buf+1就相当于将指向buf[0]的指针转移到数组的下一个元素buf[1]的操作。
所以 buf+1 == buf[1] 它的值自然就等于2了。
你可以将buf={1,5,3}试试看,结果应该会是5
回复 6# samkli
是
buf + 1 == &buf[1];
才对。