【发布时间】:2015-05-17 22:15:29
【问题描述】:
我有下面的代码来尝试理解 C 下的内存分配。该行旁边的 cmets 表示我得到的输出。不过,除了出现的字符大小之外,我很困惑。这是输出标准吗?如果是这样,这些回报是怎么来的?
char *pk[] = {"12", "34", "56"};
int w[2][3] = {{1, 2, 3}, {4, 5, 6}};
int (*ppw)[2][3] = &w;
char ch = "a";
int in = 10;
int i = sizeof(ch);
printf("SIZE OF CHAR IS %d\n",i); //1
i = sizeof(in);
printf("SIZE OF INT IS %d\n\n",i); //4
int n = sizeof(pk);
printf("%d\n",n); //24
n = sizeof(*pk);
printf("%d\n",n); //8
n = sizeof(**pk);
printf("%d\n",n); //1
n = sizeof(ppw);
printf("%d\n",n); //8
n = sizeof(*ppw);
printf("%d\n",n); //24
n = sizeof(**ppw);
printf("%d\n",n); //12
【问题讨论】:
-
先去读维基百科
-
和
char ch = "a";没有做你想做的事 -
所有这些尺寸对我来说似乎都是正确的,你应该修正这一行:
char ch = "a";应该是char ch = 'a'; -
您是否熟悉数据的二进制表示(字节、字等)。
-
不,这个输出不是标准的。但是非常符合它。除了
char ch = "a"应该生成错误消息或实际上至少是一个警告)。让我猜猜:那是一个 32 位整数的 64 位操作系统?顺便提一句。sizeof(char)总是返回 1。这个实际上是由标准定义的。您有具体问题吗?