广州做网站平台的企业西安市建设工程信息王
news/
2025/9/23 1:32:05/
文章来源:
广州做网站平台的企业,西安市建设工程信息王,楼梯平台设计,商标注册全是坑这节主要讨论sizeof和strlen的区别#xff0c;以及一些理解题。
sizeof 求的是对象的大小#xff0c;深入理解一点就是#xff1a;这个对象#xff0c;他一定有一块对应的内存空间。求的就是这一块内存空间。
strlen 只能用来求字符串#xff0c; 求取的是字符串的长度。…这节主要讨论sizeof和strlen的区别以及一些理解题。
sizeof 求的是对象的大小深入理解一点就是这个对象他一定有一块对应的内存空间。求的就是这一块内存空间。
strlen 只能用来求字符串 求取的是字符串的长度。
sizeof是一个操作符 并且是单目操作符。而strlen是一个函数两者有着本质上的区别。
stlren求取字符串的方式是从一个基地址向后进行统计字符个数直到遇到\0。而sizeof不会关注是否有\0,它只关注对象对象对应的空间有多大 结构就是多少。 这里有一些题 sizeof(arr) : arr只有在两种情况下不是数组的首地址一种情况就是sizeof运算符操作时也就是这种情况这总情况下arr代表的是整个数组 是一个对象。另一种情况就是对数组名进行取地址这个时侯的数组名也会发生改变不再是首地址。
arr被操作符sizeof操作时表示整个数组 所以sizeof此时计算的是arr数组的整个空间大小。所以是3 * 4 12
sizeof(arr 1) : arr虽然在被sizeof操作符操作时代表整个数组 但是arr 1却是一个地址。可以理解为arr本身就是一个数组的首地址可以进行整数加减运算进行加一运算后仍是一个地址这个时候的arr 1只是一个地址没有别的特别意义。所以sizeof此时计算的是一个地址的大小。而sizeof地址计算出来的结构由环境决定32位下是4 64位下是8。
sizeof(arr 2) 和 sizeof(arr 0)一样的道理。但是要注意sizeof(arr 0)虽然加的是0但是其本质上已经发生了变化。 下面再来看三个 sizeof(*arr) : *arr也就是arr[0]代表的是arr数组里面的一个元素。对象是一个元素而这个元素是int类型。故而sizeof求出来是4.
sizeofarr[0]相同的道理。
sizeof(arr) : 上面已经说过arr只有在两种情况下表示的不是首地址首地址是个常量常量无法进行取地址一种sizeof一种arr arr的值仍旧是arr常量的值 但是类型不同。arr常量的类型显而易见是int* 类型。而arr类型是int (*) [3]类型。也就是说arr类型其实是一个数组指针。sizeof计算一个指针的值与环境有关 32位环境下是4.64位环境下是8。 二维数组: sizeof(str[0][0] ) : str[0][0]确认到了元素个体 char类型一个字节 sizeof计算结果是1。
sizeof(str) : 在sizeof下代表整个数组。计算结果是16。
sizeof(str[0]) 是一次解引用。确认到了行 拿到的是str第一行的首地址。那么问题来了 str解引用后拿到的第一行的首地址代表的是第一行的数组整体呢还是代表一个地址呢
如果是代表这一行的整体 那么结果就是一行的大小也就是4.如果是一个地址 在64位环境下就应该是8我现在使用的是64位环境.而终端的结果现实的是4证明这里即便拿到str第一行的首地址 其实也被size当成了一个一维数组的整体。sizeof(*(arr 1)) 的结果与其相同。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911005.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!