1.szeof 是运算符,求【占用内存字节的大小】
它算的变量/类型所占的总字节数,包括\0
注意:一个数字,字母算一个字节,一个汉字算两个字节
2.strlen是库函数
需要头文件:#include<string.h>
它算的是\0前面的有效字符的个数
在c语言中:char ASCLL字符(英文字母,数字,英语标点)算一个字节
3.关于一个数组是否有\0,要看它是不是用 “ ”双引号,如果有双引号的话,才有\0,否则不用考虑\0的情况。
例题:
char arr[l = {‘a’,‘b’,‘c’,‘d’,‘e’,‘f’};
printf(“%zd\n”,sizeof(arr)); //6 表示整个数组的字节大小
printf(“%zd\n”,sizeof(arr+0)); //4or8 表示第一个元素的地址大小
printf(“%zd\n”,sizeof(*arr));//1 取第一个元素
printf(“%zd\n”,sizeof(arr[1]));//1 取第二个元素
printf(“%zd\n”,sizeof(&arr));//4or8 表示整个数组的地址大小
printf(“%zd\n”,sizeof(&arr + 1));//4or8 表示跳过本元素到下一个数组的地址大小
printf(“%zd\n”,sizeof(&arr[0] + 1));// 4or8 表示第二个元素地址大小
地址大小是由环境决定的,一般是4or8,看32位还是64位
char arr[l = {‘a’,‘b’,‘c’,‘d’,‘e’,‘f’};
printf(“%d\n”,strlen(arr)); 没有/0,生成随机数
printf(“%d\n”,strlen(arr + 0));
//printf(“%d\n”,strlen(*arr));字符’a’(97)当成地址,程序崩溃//错误!传
//printf(“%d\n”, strlen(arr[1]));//错误!传’b’(98)当成地址,程序崩溃
printf(“%d\n”,strlen(&arr));
printf(“%d\n”,strlen(&arr + 1));
printf(“%d\n”,strlen(&arr[0]+ 1));
全部没有\0,全部是随机数
strlen本身就是要传地址的,它是从首元素地址一个一个往后排,直到\0才结束,所以传一个艾斯克码值进去是没用的。
int a[] = {1,2,3,4};
printf(“%zd\n”,sizeof(a)); //16
printf(“%zd\n”,sizeof(a +0)); // 4或8
printf(“%zd\n”,sizeof(*a)); //4
printf(“%zd\n”,sizeof(a + 1)); //4or8
printf(“%zd\n”,sizeof(a[1])); //4
printf(“%zd\n”,sizeof(&a)); //4or8
printf(“%zd\n”,sizeof(&a + 1)); //4or8
printf(“%zd\n”,sizeof(&a[0])); //4or8
printf(“%zd\n”,sizeof(&a[0] + 1)); //4or8
369



被折叠的 条评论
为什么被折叠?



