sizeof():运算符,在编译的时候就计算好了,计算的是分配给数组所占的内存大小
strlen():函数,在运行时才能计算,计算的是不包含空字符的字符串长度
char arr0[] = "hello \0########";
cout << sizeof(arr0) << endl; //16,推导出arr0数组占16个字节,包含结尾隐式的"\0"
cout << strlen(arr0) << endl; //6,strlen()计算从开始到遇见第一个"\0"为止之间的字节大小,不包括"\0"
char arr1[20] = "hello \0########";
cout << sizeof(arr1) << endl; //20,数组大小预设20
cout << strlen(arr1) << endl; //6,同上
char arr2[] = "word";
cout << sizeof(arr2) << endl; //5,推导出arr2数组占5个字节,包含4个字符和结尾隐式的"\0"
cout << strlen(arr2) << endl; //4,同上
strcat(arr1, arr2);
cout << arr1 << endl; //hello word
char *arr3 = "hello \0########";
//这样写会报警告:deprecated conversion from string constant to 'char *'
//char *背后的含义是:给我个字符串,我要修改它。而理论上,我们传给函数的字面常量是没法被修改的。比较和理的办法是把参数类型修改为const char *。
cout << sizeof(arr3) << endl; //4,sizeof()此时计算的是arr3首地址所占的字节数
cout << strlen(arr3) << endl; //6,同上
cout << "------------------------------------------" << endl;
char a1[] = {'C','+','+'};
cout << sizeof(a1) << endl; //3
cout << strlen(a1) << endl; //不确定。由于该字符数组初始化没有'\0',巴拉巴拉。。。
char a2[] = {'C','+','+','\0'};
cout << sizeof(a2) << endl; //4
cout << strlen(a2) << endl; //3
char a3[] = "C++";
cout << sizeof(a3) << endl; //4
cout << strlen(a3) << endl; //3
char a4[10] = "C++";
cout << sizeof(a4) << endl; //10
cout << strlen(a4) << endl; //3
char a5[10] = "";
cout << sizeof(a5) << endl; //10
cout << strlen(a5) << endl; //0
char * p="string1";
char a6[]="string2";
//p是一个指向char变量的指针,a6则是一个char数组(字符数组)
//char*是变量,值可以改变, char[]是常量,值不能改变!
//p是一个char型指针变量,其值(指向)可以改变;
//a6是一个char型数组的名字,也是该数组首元素的地址,是常量,其值不可以改变
cout << sizeof(p) << endl; //4
cout << strlen(p) << endl; //7
cout << sizeof(a6) << endl; //8
cout << strlen(a6) << endl; //7