#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个字节。
我无法理解第3个输出是10.这里我们有指针数组,每个指针指向一个整数。我系统中指针(或地址)的大小是32位(4字节)。所以输出应该是5 * 4 = 20,因为我们有4个字节的5个指针?
答案 0 :(得分:7)
第二个打印输出显示机器上指针的大小为2个字节。
数组int *p1[5];
有5个元素,而不是10个。
5 * 2 = 10.
答案 1 :(得分:2)
我系统中指针(或地址)的大小是32位
Turbo C ++是一个MS-DOS程序。它无法直接在现代操作系统上运行。您的操作系统以一种对您完全透明的方式创建一个模拟的16位MS-DOS计算机来运行您过时的内容。所以不,你(仿真)系统上的指针大小是16位。您使用的是16位系统。
如果将代码生成切换为“大”或“巨大”模式,Turbo C ++实际上能够使用32位指针。该系统仍然是一个16位的系统,它只有一个带有“长”指针的奇怪寻址方案。
另一方面,在当前千禧年使用Turbo C ++是not recommended(警告:无耻插件)。
答案 2 :(得分:1)
这三个数字彼此一致。但你似乎使用的是16位系统。所以你的指针使用2个字节。 5个元素乘以2个字节,每个等于10个字节。