sizeof 和 strlen(C语言)
strlen 是一个库函数,定义在#include<string.h>中,计算的是字符串的大小; 其函数原型是:size_t strlen (const char*str ) 该函数返回会传入的地址(指针)到 \0 之前的字符个数,返回类型是size_t。对于size_t它表示为 unsigned int 是一个无符号的整型。在标准中重定义了unsigned int为size_t,即:typedf unsigned int size_t ; sizeof 是一个操作符,计算的所占内存空间的大小,单位是字节。 对于数组名来说,绝大多数情况来说都是表示数组首素的地址;对于二维数组来说,数组首素的地址是二维数组第一行的地址。下面两种情况是数组名表示整个数组的大小:1)sizeof(数组名) 计算的是整个数组的大小,单位是字节。2)&数组名 取出来的是整个数组的地址。 sizeof(a) //这个是特例,计算的是整个数组的大小。即5个int 5*4=20; sizeof(a+0) //首先进行a+0的运算,是将首素的地址加0,即得到是数组第0个素的地址,即计算的第二个素地址的大小。即 4/8。32位平台下就是4/64位平台下就是8。 sizeof(*a) //对数组首素的地址解引用,找到的首素,即首素的大小就是一个int类型的大小。即 4。 sizeof(a+1) //首先进行a+1的运算,是将首素的地址加1,即得到是数组第二个素的地址,即计算的第二个素地址的大小。即 4/8。32位平台下就是4/64位平台下就是8。 sizeof(a[0]) //即首素的大小,就是一个int类型的大小。即 4。 sizeof(&a) //&数组名 取出来的是整个数组的地址,即计算的数值地址的大小,即4/8。 sizeof(*&a)//&数组名 取出来的是整个数组的地址,对数组地址解引用,找到的是整个数组,即计算的是整个数组的大小。即5个int 5*4=20; sizeof(&a+1) //&数组名取出来的是整个数组的地址,加1,会跳过整个数组,得到了数组末素的地址的后一个地址;即计算的地址的大小,即4/8。 sizeof(&a[0]+1) //&a[0]得到的数组第一个素的大小,对其加1,就得到了数组中第二个素的地址,计算的是地址的大小,即4/8。 strlen(a) //strlen 函数得到了数组首素的地址,会像后找到\0,即停止,然后返回size_t类型,即字符个数。即这会得到一个随机值,不晓得后面会在什么时候遇到\0。即42 strlen(a+0) //数组首素的地址+0得到的还是数组首素的地址,strlen 函数得到了首地址,向后找\0;\0 不知道会什么时候出现,即是随机值。即42 strlen(*a) //对数组首素的地址解引用得到的是数组首素,即strlen(‘a’);这时候就等于是strlen(97),会把97当作地址,从97开始向后找\0,但是这种编译器会出现0x00007FF81F157A20 (ucrtbased.dll)处(位于 5_4.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000061 时发生访问冲突。这时候这就是一个野指针了,编译器对小地址会特别敏感。 strlen(a+1)//数组首素的地址+1得到的还是数组第二个素的地址,strlen 函数得到了第二个素的地址,向后找\0;\0 不知道会什么时候出现,即是随机值-1。即41 strlen(a[0])//同样的,a[0]是字符a 即strlen(97),会把97当作地址,从97开始向后找\0,但是这种编译器会0x00007FF81E7D7A20 (ucrtbased.dll)处(位于 5_4.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000061 时发生访问冲突。 strlen(&a)// &a得到数组地址,从数组地址向后找\0;即是随机值。即42 strlen(&a+1)//&a得到数组地址,&a+1跳过整个数组,得到数组后的地址;即随机值-4。即38 strlen(&a[0]+1)//&a[0]得到数组首素的地址,数组首素的地址+1得到数组第二个素的地址。即随机值-1。即41 strlen(p)//p是一个指针,它储存的是字符串”hello”的第一个字符的地址,即p储存字符h的地址。从p开始向后找\0。即是5。 strlen(&p)//p是一个指针,也是一个变量,取出指针的地址。即是随机值。即随机值6 strlen(&p+1)//&p取出指针的地址,&p+1,即地址跳过一个指针的大小。※不是随机值-1。即就是随机值30
所以不是:※不是随机值-1。是随机值30
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/54996.html