之前都没有注意过这些差别
用错了的都不知道
今天百度了一下,现在了解清楚了
可能也有很多同学不太清楚的,可以仔细看一下
解释在代码中有
#include<bits/stdc++.h>
using namespace std;
int main() {
char *a = "hello";
char arr1[]= "hello";
char arr2[] = { 'l', 'o', 'l' };
printf("%d\n", sizeof(a));
//结果为8,因为指针变量的所占空间大小仅仅和操作系统位数有关32-4,64-8
printf("%d\n", sizeof(arr1));
//结果为6,字符串默认以\0结尾,sizeof()包含\0的计算
printf("%d\n", sizeof(arr2));
//结果为3,因为为字符型表示,并不含有\0
printf("%d\n", strlen(a));
//结果为5,strlen求的是字符串的长度,不包含\0
printf("%d\n", strlen(arr1));
//结果为5,strlen求的是字符串的长度,不包含\0
printf("%d\n", strlen(arr2));
//结果为3
//如果字符的个数等于字符数组的大小,那么strlen()的返回值就无法确定了,例如
//char str[6] = "abcxyz";
//strlen(str)的返回值将是不确定的。因为str的结尾不是0,strlen()会继续向后检索,直到遇到'\0',而这些区域的内容是不确定的。
return 0;
}