【发布时间】:2013-10-24 13:16:38
【问题描述】:
现在我可以使用var_num=sizeof(var)/sizeof(var[0]); 计算第一个维度,顺便说一下我已经研究过并在我的代码中使用它,但问题是我不知道它是如何工作的,在我的输出中它显示20 / 4 = 5我不知道那个 20 和 4 是从哪里来的,我只想问sizeof(var) 和sizeof(var[0]) 是如何获取这些值的,那个零是什么意思,它是指第一个还是二次元?
#include <stdio.h>
#include <conio.h>
void main(){
char *var[][2]={
{"var0-0","var0-1"},
{"var1-0","var1-1"},
{"var2-0","var2-1"},
{"var3-0","var3-1"},
{"var4-0","var4-1"},
};
int var_num=sizeof(var)/sizeof(var[0]);
clrscr();
printf("%d / %d = %d",sizeof(var),sizeof(var[0]),var_num);
getch();
}
【问题讨论】:
-
这些值令人难以置信。我在 32 位机器上得到
40 / 8 = 5。 40 是总大小,8 是一个条目的大小(这是一个char * [2],所以我的第一个维度中有 5 个元素。如果你在单行上做同样的事情,你会得到8 / 4 = 2,因为一行包含2 个条目,每个条目 4 个字节。 -
在 64 位机器上,结果分别为
80 / 16 = 5。16 / 8 = 2. -
也许你的输出来自你的程序的前一个版本,它在数组中少了一个维度。
-
你确定这是你得到的输出吗?在我的系统上,我得到
40 / 8 = 5(32 位模式)或80 / 16 = 5(64 位模式)。