详细描述数组指针和指针数组
时间: 2023-09-25 20:15:41 浏览: 86
数组指针和指针数组是 C 语言中两种不同的概念。
1. 数组指针
数组指针是指一个指针,它指向一个数组。它本质上是一个指针变量,它存储着数组的首地址。我们可以使用数组指针来访问数组中的元素。
例如,下面的代码定义了一个整型数组 a 和一个指向整型数组的指针变量 p:
```
int a[5] = {1, 2, 3, 4, 5};
int (*p)[5] = &a;
```
在这个例子中,p 是一个指向整型数组的指针变量。&a 是数组 a 的地址,即 a 的首地址。因为 a 是一个整型数组,所以它的类型为 int [5],因此 p 的类型为指向 int [5] 类型的指针,即 int (*)[5]。
我们可以通过 p 来访问数组 a 中的元素,例如:
```
printf("%d\n", (*p)[0]); // 输出 1
```
在这个例子中,(*p)[0] 表示数组 a 的第一个元素。
2. 指针数组
指针数组是指一个数组,其中每个元素都是一个指针。它本质上是一个数组,其中存储着多个指针变量。我们可以使用指针数组来存储多个指针,每个指针指向不同的内存地址。
例如,下面的代码定义了一个指针数组 p,其中每个元素都是一个指向整型变量的指针:
```
int a = 1, b = 2, c = 3;
int *p[3] = {&a, &b, &c};
```
在这个例子中,p 是一个指针数组,其中每个元素都是一个指向整型变量的指针。&a、&b 和 &c 分别是变量 a、b 和 c 的地址,因此 p 的第一个元素指向变量 a,第二个元素指向变量 b,第三个元素指向变量 c。
我们可以通过指针数组来访问这些变量,例如:
```
printf("%d\n", *p[0]); // 输出 1
```
在这个例子中,*p[0] 表示指针数组 p 的第一个元素所指向的内存地址中存储的值,即变量 a 的值。
总的来说,数组指针和指针数组都是 C 语言中非常基础的概念,掌握它们对于理解指针和数组的使用非常重要。
阅读全文