我了解您是否有一个数组,并且执行sizeof,它给出了内存块所占用的字节数,但是我对以下情况有些困惑。
int mylen(const char *str) {
return sizeof(str);
}
int main(void) {
char str[] = "hello";
printf("%d\n", sizeof(str)); // this gives 6
printf("%d\n", mylen(str)); // this gives 8
}
我知道mylen只是返回sizeof char指针,因此返回8,但是在那种情况下,为什么第一个起作用?这是str和char *之间的微妙区别吗?
答案 0 :(得分:0)
与之相同的原因
char foo[6];
sizeof(foo); // yields 6
和
char *bar;
sizeof(bar); // yields 8 (or in general: the size of a pointer on your system)
btw,由于sizeof
运算符的结果为size_t
类型,因此您的mylen()
应该返回size_t
(在<stddef.h>
中定义),而不是int
。
此外,如果您想printf()
使用size_t
,则必须使用"%zu"
,而不要使用"%d"
。
有关更多详细信息,您可能需要阅读有关数组到指针衰减的内容:Why do arrays in C decay to pointers?