让我们考虑int array[] = {2,33,4,56,7,8};//案例A
如果sizeof of ()选中'\0‘作为char[]数组的结尾!作为一个哨兵值,多少(数组)检查以找到int数组的结束,因此在A种情况下数组的大小?
如果我要实现intArray,就没有访问哨兵值信息的自由了?
发布于 2013-10-19 02:08:58
sizeof不检查任何东西。它看起来只是一个函数调用,但它实际上是一个操作符,一个编译器技巧,插入编译器在编译时已知的大小。
下面是sizeof与C数组的交互方式:当您声明一个数组时,您可以将它的大小指定为常量、运行时整数表达式,或者通过向数组提供一定数量的值来隐式地指定它的大小。
当在编译时知道元素数时,编译器将sizeof(array)替换为实际编号。当元素的数量直到运行时才知道时,编译器将准备一个特定于实现的特殊存储位置,并将大小存储在那里。运行中的程序需要这些信息来进行堆栈清理。编译器还将此隐藏信息告知sizeof实现的运行时部分,以返回正确的值。
发布于 2013-10-19 02:19:33
sizeof不是一个函数,而是一个编译时操作符,它被替换为变量的大小。对于真正的数组(不是指针),它被替换为数组内容的字节大小,因为它在编译时就知道了;
试着让自己相信以下几点:
void print_size(int[] array)
{
printf("%u\n", sizeof(array)); //Prints 4 (= sizeof(int*))
//May print 8 on 64b architectures
}
int main()
{
int array[] = {2,33,4,56,7,8};
printf("%u\n", sizeof(array)); //Prints 24 (= 6*sizeof(int))
print_size(array);
return 0;
}这是因为,在main内部,编译器知道数组是一个6int的数组,而函数print_size可以与任何数组一起调用,因此它的大小是事先不知道的:它被视为int* (但我不确定它是否为lvalue)。
https://stackoverflow.com/questions/19461557
复制相似问题