为什么这个字符变量的大小等于1?
int main(){
char s1[] = "hello";
fprintf(stderr, "(*s1) : %i\n", sizeof(*s1) ) // prints out 1
}
为什么这个字符变量的大小等于1?
int main(){
char s1[] = "hello";
fprintf(stderr, "(*s1) : %i\n", sizeof(*s1) ) // prints out 1
}
NOTA:原来的问题已经在第一改变了一点点是: 为什么这个字符指针1的大小
sizeof(*s1)
是相同的
sizeof(s1[0])
其是一个的大小char
对象,而不是一个大小char
指针。
类型的对象的大小char
总是1
中C.
要获得的大小char
指针使用此表达式: sizeof (&s1[0])
为什么这个字符变量的大小等于1?
因为一个的大小char
被保证是1
由C标准字节。
*s1 == *(s1+0) == s1[0] == char
如果你想获得一个字符指针的大小,你需要一个字符指针传递给sizeof
:
sizeof(&s1[0]);
因为您正在deferencing从阵列衰减指针s1
所以你获得第一尖元件,这是一个的值char
和sizeof(char) == 1
。
sizeof(*s1)
是指“在元件的尺寸由指向s1
”。 现在s1
是阵列char
S,并且当作为指针处理(它“衰变成”指针),解除引用它导致类型的值char
。
而且, sizeof(char)
始终是一个。 C标准要求它是如此。
如果你想整个数组的大小,使用sizeof(s1)
来代替。
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.