1.szeof 是运算符求【占用内存字节的大小】它算的变量/类型所占的总字节数包括\0注意一个数字字母算一个字节一个汉字算两个字节2.strlen是库函数需要头文件#includestring.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(arr0)); //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)); //16printf(“%zd\n”,sizeof(a 0)); // 4或8printf(“%zd\n”,sizeof(*a)); //4printf(“%zd\n”,sizeof(a 1)); //4or8printf(“%zd\n”,sizeof(a[1])); //4printf(“%zd\n”,sizeof(a)); //4or8printf(“%zd\n”,sizeof(a 1)); //4or8printf(“%zd\n”,sizeof(a[0])); //4or8printf(“%zd\n”,sizeof(a[0] 1)); //4or8