声明指针数组的问题

时间:2011-04-06 19:25:02

标签: c++ c arrays pointers declaration

当我执行此代码时

#include<stdio.h>

int main() {
 int (*x)[5];
printf("\nx = %u\nx+1 = %u\n&x = %u\n&x + 1 = %u",x,x+1,&x,&x+1);
}

这是C或C ++中的输出:

x = 134513520
x+1 = 134513540
&x = 3221191940
&x + 1 = 3221191944

请解释一下。还有什么区别:

int x[5]int (*x)[5]

4 个答案:

答案 0 :(得分:7)

  • int x[5]是一个包含5个整数的数组
  • int (*x)[5]是指向 5个整数数组的指针

增加指针时,会增加指向类型的大小。因此,x+1 5*sizeof(int)字节大于x - 提供80483708048384十六进制值,差值为0x14或20。

&x是一个指向指针的指针 - 所以当你递增它时你添加sizeof(a pointer)个字节 - 这会给出bf9b08b4bf9b08b8十六进制值,区别在于4。

答案 1 :(得分:5)

  1. int x[5]是一个包含5个整数的数组
  2. int (*x)[5]是指向5个整数的数组的指针
  3. int* x[5]是一个包含5个指向int的数组

答案 2 :(得分:4)

int (*x)[5];

声明一个指向数组的指针。

从问题标题中,您可能想要

int* x[5];
而是,它声明了一个指针数组。

int x[5];

声明了int s的简单旧数组。

答案 3 :(得分:3)

int x[5];

声明一个包含五个整数的数组。

int (*x)[5];

声明一个指向5个整数的数组的指针。

您可能会发现cdecl.org有用。