我编写了以下程序来确定静态数组的大小。当我跑它时,我得到了一个我无法解释的结果。我已经在stackexchange和google上做了一些搜索,但我读过的内容并没有给我一些提示。
#include <stdio.h>
int main()
{
int arrSize, intSize, elemSize;
int input[9][9];
arrSize = sizeof(input);
intSize = sizeof(int);
elemSize = sizeof(input[0]);
printf("Array: %d, Element: %d, Int: %d\n", arrSize, elemSize, intSize);
return sizeof(input);
}
当我编译并运行该程序时,我得到以下结果(使用linux):
./a.out ; echo $?
Array: 324, Element: 36, Int: 4
68
我从http://c-faq.com/malloc/sizeof.html看到sizeof
是在编译时计算的,如果我将返回值更改为return sizeof(input[0])
,我会得到36
这是预期的,我得到{ {1}}如果我按预期将其更改为4
。那么为什么return sizeof(input[0][0])
会在回复中提供sizeof(input)
,但是在存储时会给出预期的68
?
答案 0 :(得分:7)
您系统的exit code必须为255
,我们可以看到324 % 256 = 68
。
答案 1 :(得分:4)
子进程终止后,其父进程可以通过
获取该子进程的状态信息waitpid(-1, &status, 0);
根据waitpid(2)
此宏
status
WEXITSTATUS(status)
提取返回状态
返回子项的退出状态。这包括子项在
exit(3)
或_exit(2)
的调用中指定的状态参数的最不重要的8位,或者作为{{1中的return语句的参数}}
因此,如果您的main()
返回324,则您从shell获得的返回代码为main()
,即68。
答案 2 :(得分:0)
从bash shell和脚本语言参考文档的“退出状态”部分:[2] 执行命令的退出状态是waitpid系统调用或等效函数返回的值。但退出状态介于0到255之间,如下所述,shell可能会特别使用大于125的值。 shell builtins和复合命令的退出状态也仅限于此范围。在某些情况下,shell将使用特殊值来指示特定的故障模式。 有关更多信息,请访问:Exit status in Unix
这就是为什么你的程序提供这个输出,因为324是数组的大小,但shell只能显示256个所以
324%256=68;
如果要输出更多,可以将其写入stdout或文件。