const char *str1 = "abcd";这个语句在内存中分配了一块静态内存存储字符数组,然后把该字符数组的首地址赋予指针str1,这里的str1是一个指针,用sizeof操作符对其操作时,返回的是该指针的大小。 char str2[5] = "abcd";这个语句在栈内存中分配了一块内存存储字符数组,然后把该字符数组的首地址赋予str2,标识该数组,用sizeof操作符对其操作时,返回的则是数组名str2所标识数组的元素个数。 Update: 更正 sizeof(type) sizeof expression 两个版本都返回一个size_t类型的常量。 1) 返回 type 类型对应对象的大小(以字节为单位)。 2) 返回 expression 的返回类型对应对象的大小(以字节为单位)。 所以原来的回答有错误,现更正为: sizeof str1返回的是指针str1的字节大小,sizeof str2返回的是str2所标识数组的所有元素的字节大小。
const char *str1 = "abcd";
这个语句在内存中分配了一块静态内存存储字符数组,然后把该字符数组的首地址赋予指针str1
,这里的str1
是一个指针,用sizeof
操作符对其操作时,返回的是该指针的大小。char str2[5] = "abcd";
这个语句在栈内存中分配了一块内存存储字符数组,然后把该字符数组的首地址赋予str2
,标识该数组,用sizeof
操作符对其操作时,返回的则是数组名str2
所标识数组的元素个数。Update: 更正
两个版本都返回一个
size_t
类型的常量。1) 返回 type 类型对应对象的大小(以字节为单位)。
2) 返回 expression 的返回类型对应对象的大小(以字节为单位)。
所以原来的回答有错误,现更正为:
sizeof str1
返回的是指针str1
的字节大小,sizeof str2
返回的是str2
所标识数组的所有元素的字节大小。