C语言中,指针数组和数组指针的区别是什么?
时间: 2023-07-20 11:23:59 浏览: 54
在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; // 获取整个数组的指针
```
总的来说,指针数组和数组指针都是非常常用的数据结构,但它们的用法和定义有所不同,需要根据实际情况选择使用哪种数据结构。