char a[] = "abc"; char b[] = {'a', 'b', 'c'}; printf("%d, %d", sizeof(a), sizeof(b));
char a[] = { 'a', 'b', 'c', 'd', 'e', 'f' }; printf("%d\n", sizeof(a)); //6:求的是整个数组的大小,由于每个元素大小是1,所以结果是6// 如果是char p[]="abcdef";结果就是 7,要包含'\0'printf("%d\n", sizeof(a + 0)); //4:求的是数组首元素的地址长度,此处为32位 printf("%d\n", sizeof(*a));//1:求的是第0个元素的大小 printf("%d\n", sizeof(a + 1));//4:求的是第1个元素的地址长度,此处为32位
char* p = "abcdef"; printf("%d\n", sizeof(p));//4 8:对指针变量求sizeof,32位机器在下是4,64位机器下是8 printf("%d\n", sizeof(p+1));//4 8:指针变量+1跳过一个指向的对象,指指向b结果不变,仍然是指针
string s = "abcdef" sizeof(s);// 7, 后面还有个'\0' strlen(s);// 6,实际长度