指针数组和数组指针有什么区别?
时间: 2023-12-06 14:36:37 浏览: 88
指针数组和数组指针的区别如下:
1. 定义方式不同:指针数组定义为 int *p[n];,其中p是一个数组,包含n个指向int类型的指针;而数组指针定义为 int (*p)[n];,其中p是一个指向int类型的指针,指向一个长度为n的一维数组。
2. 指向的对象不同:指针数组中每个元素都是一个指针,指向不同的int类型变量;而数组指针指向的是一个一维数组,数组中的元素都是int类型变量。
3. 访问方式不同:指针数组可以通过下标访问每个指针指向的变量,也可以通过指针间接访问;而数组指针只能通过指针加下标的方式访问数组中的元素。
下面是一个指针数组和数组指针的例子:
```c
#include <stdio.h>
int main() {
int a = 1, b = 2, c = 3;
int *arr[3] = {&a, &b, &c}; // 定义指针数组
int (*p)[3] = &arr; // 定义数组指针
printf("%d %d %d\n", *arr[0], *arr[1], *arr[2]); // 输出:1 2 3
printf("%d %d %d\n", (*p)[0], (*p)[1], (*p)[2]); // 输出:1 2 3
return 0;
}
```
相关问题
指针数组和数组指针有什么区别
指针数组和数组指针有以下区别:
1. 定义方式不同:
- 数组指针的定义形式是`int (*p)[n];`,其中`p`是一个指针,指向一个长度为`n`的整型一维数组。
- 指针数组的定义形式是`int *p[n];`,其中`p`是一个数组,包含了`n`个指向整型的指针。
2. 数据类型不同:
- 数组指针是一个指针,它指向一个整型一维数组。
- 指针数组是一个数组,它包含了多个指向整型的指针。
3. 内存布局不同:
- 数组指针在内存中占据的空间大小是一个指针的大小。
- 指针数组在内存中占据的空间大小是多个指针的大小,每个指针指向一个整型变量。
4. 使用方式不同:
- 数组指针可以通过指针运算来访问数组中的元素,例如`(*p)[i]`。
- 指针数组可以通过数组下标来访问数组中的指针,例如`p[i]`。
5. 用途不同:
- 数组指针常用于多维数组的传递和访问。
- 指针数组常用于存储多个指针,例如存储字符串数组。
C语言中,指针数组和数组指针的区别是什么?
在C语言中,指针数组和数组指针都是指针和数组的组合,但是它们的含义和用法是不同的。
指针数组是一个数组,其中每个元素都是一个指针。它的定义形式为:`type *array_name[size]`,其中`type`是指针指向的数据类型,`array_name`是数组的名称,`size`是数组的大小。例如,`int *ptr_arr[5]`就是一个包含5个`int`指针的数组。
数组指针是一个指针,它指向一个数组。它的定义形式为:`type (*ptr_name)[size]`,其中`type`是数组元素的数据类型,`ptr_name`是指向数组的指针,`size`是数组的大小。例如,`int (*ptr_arr)[5]`就是一个指向包含5个`int`元素的数组的指针。
区别在于,指针数组是一个数组,它的每个元素都是一个指针,而数组指针是一个指针,它指向一个数组。因此,指针数组可以通过索引访问每个元素,每个元素都是一个指针,它可以指向不同类型的数据。而数组指针可以通过指针运算访问数组中的元素,因为它指向的是一个数组,它只能指向相同类型的数组。
举个例子,如果有一个`int`类型的数组`arr`,那么可以定义一个指针数组来保存每个元素的指针:
```
int arr[5] = {1, 2, 3, 4, 5};
int *ptr_arr[5];
for (int i = 0; i < 5; i++) {
ptr_arr[i] = &arr[i]; // 获取每个元素的指针
}
```
也可以定义一个数组指针来指向整个数组:
```
int arr[5] = {1, 2, 3, 4, 5};
int (*ptr_arr)[5];
ptr_arr = &arr; // 获取整个数组的指针
```
总的来说,指针数组和数组指针都是非常常用的数据结构,但它们的用法和定义有所不同,需要根据实际情况选择使用哪种数据结构。
阅读全文