声明指针数组的问题

Sad*_*que 3 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);
}
Run Code Online (Sandbox Code Playgroud)

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

x = 134513520
x+1 = 134513540
&x = 3221191940
&x + 1 = 3221191944
Run Code Online (Sandbox Code Playgroud)

请解释.还有什么区别:

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

Eri*_*rik 7

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

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

&x是一个指向指针的指针 - 所以当你递增它时你添加sizeof(a pointer)字节 - 这给出了bf9b08b4bf9b08b8十六进制值,相差4.


Jos*_*eld 5

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