C sizeof char指针

时间:2013-01-12 16:36:58

标签: c pointers char sizeof

为什么这个char变量的大小等于1?

int main(){

char s1[] = "hello";

fprintf(stderr, "(*s1) : %i\n", sizeof(*s1) )    // prints out 1

}

5 个答案:

答案 0 :(得分:14)

NOTA:最初的问题已经发生了一些变化:为什么这个字符指针1的大小

sizeof(*s1)

相同

sizeof(s1[0]),它是char对象的大小,而不是char指针的大小。

{C}中char类型对象的大小始终为1

要获取char指针的大小,请使用以下表达式:sizeof (&s1[0])

答案 1 :(得分:5)

  

为什么此char变量的大小等于1?

因为C标准保证char的大小为1字节。

*s1 == *(s1+0) == s1[0] == char

如果要获取字符指针的大小,则需要将字符指针传递给sizeof

sizeof(&s1[0]);

答案 2 :(得分:5)

因为您正在引用从数组s1中衰减的指针,所以您获得了第一个指向元素的值,即charsizeof(char) == 1

答案 3 :(得分:3)

sizeof(*s1)表示“s1指向的元素的大小”。现在s1char的数组,当被视为指针(它“衰变为”指针)时,取消引用它会产生类型char的值。

并且sizeof(char) 总是一个。 C标准要求它是。

如果您想要整个数组的大小,请改用sizeof(s1)

答案 4 :(得分:1)

sizeof(*s1) means its denotes the size of data types which used. In C there are 1 byte used by character data type that means sizeof(*s1) it directly noticing to the character which consumed only 1 byte.

If there are any other data type used then the **sizeof(*data type)** will be changed according to type.