📅  最后修改于: 2023-12-03 14:42:07.664000             🧑  作者: Mango
在C语言中,指针是一种十分重要的概念。常常会出现int (*p)[3]
和 int* p[3]
两者混淆的情况,它们之间有什么区别呢?
int (*p)[3]
是一个指向数组的指针,这个数组是有3个元素,元素类型是int。也可以理解为这个指针指向了一个有3个int类型元素的数组。int* p[3]
是一个指针数组,它包含有3个指针元素,每个指针元素的类型是int*(即指向int类型的指针)。讲解时可以画图加以区别:
1. int (*p)[3]
| p |
| --------->
| [0] | [1] | [2] |
| X | X | X |
2. int *p[3]
| p | | |
| [0]: ----->| [1]: -----> | [2]: ---->|
| [0] | [1] | [0] | [1] | [0] | [1]|
| X | X | X | X | X | X |
#include <stdio.h>
int main() {
int a[3][3] = {1,2,3,4,5,6,7,8,9}; // 二维数组
int (*p)[3] = a; // 指向数组的指针
int b[3] = {4,5,6};
int c[3] = {7,8,9};
int* arr[3] = {b,c,a[0]}; // 指针数组
printf("a[1][2]: %d\n", p[1][2]);
printf("*arr[2]: %d\n", *arr[2]);
return 0;
}
在上面的示例代码中,int (*p)[3]
指向了二维数组 a
,而 int* arr[3]
则是一个指针数组,包含了指针 b
、c
以及 a[0]
中第一个元素的指针。