sizeof strlen 与 数组 指针

1,sizeof: 为操作符,返回对象、类型所占空间大小(字节为单位), 类型为size_t 。

这个返回值的大小并不一定是对象的内容所占的空间。基于效率方面考虑,存在编译对齐这一行为,对于结构体来说,成员分布不一定连续,sizeof()的结果往往大于本身各个数据成员sizeof()返回值之和。(数组是连续存放的,通常编译器通常不对数组实施对齐,所以这里不需要考虑这点。)

2, strlen: 函数,是从参数给定的内存地址开始判断该地址上对应的char值是否为0,如果不是则继续判断下一个,最后返回非0字节的个数,所以不只适用于字符串。不过对于非字符串,由于字符串结束符0存在的不确定,所以不一定能得到结果,有可能会因为访问到被系统保护禁止读取的内存区段导致程序崩溃。

    char *c = "abcdef";
    char d[] = "abcdef";
    char e[] = {'a', 'b','c','d','e','f'};

    printf("sizeof(c):%d\t strlen(c):%d\n", sizeof (c), strlen((c)));
     printf("sizeof(d):%d\t strlen(d):%d\n", sizeof (d), strlen((d)));
      printf("sizeof(e):%d\t strlen(e):%d\n", sizeof (e), strlen((e)));

打印结果:

sizeof(c):8	 strlen(c):6
sizeof(d):7	 strlen(d):6
sizeof(e):6	 strlen(e):12

分析:(1):c为指针,指针类型为int存储地址,64位系统结果为8 (32位为4);
(2):d为char[]数组,初始化中可以确定它的类型是char[7],每个元素(char型)占1个字节,所以共7字节。strlen理由同上。(始化列表中的两个双引号之间的字符串字面量填充到数组中时,会自动在最后补0。)
(3):由初始化可见e是char[6]型的,sizeof(e)为6,strlen(e)理论上来说是不确定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值