整数指针数组的大小

时间:2017-07-08 20:27:32

标签: c++ arrays pointers

#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个指针?

3 个答案:

答案 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位系统

这三个数字彼此一致。但你似乎使用的是16位系统。所以你的指针使用2个字节。 5个元素乘以2个字节,每个等于10个字节。