Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

数组指针是定义一个指针来操作数组。

1
2
int arr[5] = {10, 20, 30, 40, 50};
int (*p)[5] = &arr;

在初学阶段,学习的是定义数组指针,[]里面的值必须和数组的大小一致。

但是为什么要一致?不一致可以吗?

如果我们这样定义:

1
2
int arr[5] = {10, 20, 30, 40, 50};
int (*p)[3] = &arr;

编译器会警告:

image-20250731193234909

我们暂时忽略警告,我们就用这个指针来操作一下数组。

执行p++;

1
2
3
4
int arr[5] = {10, 20, 30, 40, 50};
int (*p)[3] = &arr;
p++;
printf("%d\n",**p);

image-20250731193432493

为什么输出的是40?

定义p指针,大小是3,说明该指针+1的能力是三个int大小,p++后,p就指向到了40这个地址。

此时的p应该指向的是{40,50}。

验证一下,*p得到的是{40,50}这个数组。

那么*p+1应该就是50的地址。

image-20250731193834567

果然如此。所以定义数组指针并非一定要和数组的大小一致。

因为数组指针,他首先是一个指针,他不应被应该指向谁而约束。

但是仅限于c语言,再c++后对数组指针的定义做了强制规定,必须和数组大小一致,为了就是避免产生未定义行为。

恰恰说明了c语言的强大。

评论