【发布时间】:2017-07-08 20:27:32
【问题描述】:
#include<stdio.h>
#include<conio.h>
void main()
{
int a[5]={1,2,3,4,5};
int (*p)[5];
int *p1[5];
clrscr();
printf("%d\n",(int)sizeof(a)); // 10
printf("%d\n",(int)sizeof(p)); //2
printf("%d\n",(int)sizeof(p1)); //10
getch();
}
第一个输出是 10,因为每个整数都是 2 个字节,因此 5 个整数需要 10 个字节。
我无法理解第三个输出,即 10。这里我们有一个指针数组,每个指针都指向一个整数。我系统中指针(或地址)的大小为 32 位(4 字节)。所以输出应该是 5*4=20,因为我们有 5 个指针,每个指针 4 个字节?
【问题讨论】:
-
这是 C 还是 C++?您是否有机会使用 Turbo C++?
-
你的系统可能是 32 位的,但 TurboC++ 是在 16 位编译器风靡一时之前出现的。
-
@WeatherVane:OP 声明他使用的是 TurboC++。在进一步的信息之前,它更可能是 C++(即 TC++ 的古老方言)而不是 C。
-
停止使用它,让自己成为上个千年所没有的编译器。
-
@Xylene23 这是一个新问题。提出新问题以提出新问题。更好的是,不要问它。这应该在任何不是完全欺诈的教科书的前几章中介绍。