c语言 数组指向指针
时间: 2025-01-04 10:27:16 浏览: 19
### C语言中数组与指针的关系
在C语言中,数组名本质上可以被解释为指向该数组首元素的地址。当提到数组指针时,实际上是指一个专门用于保存整个数组起始位置的指针变量。
对于一维数组而言,在大多数情况下表达式中的数组名称会被自动转换成指向其第一个元素的指针[^1]。例如:
```c
int a[] = {0, 1, 2};
// 这里a会隐式转化为指向int类型的指针(&a[0])
printf("%d", *a); // 输出0
```
而针对多维数组,则存在两种不同的概念——“指针数组”和“数组指针”。前者指的是由多个指针构成的一维数组;后者则是单个指针对象,它所指向的是一个多维数据结构的第一项的位置。
#### 定义数组指针
为了创建一个能够处理特定大小数组的对象,可以通过如下方式来定义数组指针:
```c
char (*arrayPtr)[5]; // 创建了一个名为arrayPtr 的指针,它可以指向含有五个字符(char)的数据块
```
上述代码表示`arrayPtr` 是一种特殊形式的指针,用来指示长度固定为五的字符型数组所在之处。
另外还有一种更简洁的方法通过 `typedef` 来简化复杂声明语句:
```c
typedef int(*IntArrPtr)[12];
IntArrPtr ptr; // 此处ptr 就代表了之前复杂的类型说明符
```
这种方式不仅提高了可读性,而且使得后续编程更加方便快捷[^2]。
#### 使用数组指针访问元素
一旦有了这样的指针之后就可以很方便地操作对应的数组内容了。比如遍历二维整数矩阵(假设每行有三个整数),可以用下面这段程序实现:
```c
#include <stdio.h>
void printMatrix(int rows, int cols, int (*matrix)[cols]) {
for (size_t i = 0; i < rows; ++i){
for (size_t j = 0; j < cols; ++j){
printf("%d ", matrix[i][j]);
}
putchar('\n');
}
}
int main(){
int mat[][3]={{1,2,3},{4,5,6}};
size_t row_count=sizeof(mat)/sizeof(mat[0]);
printMatrix(row_count, 3, mat);
return 0;
}
```
在这个例子中,函数参数列表里的`(int (*matrix)[cols])` 表明传入的是一个指向具有指定列数(`cols`) 的整形数组的指针。这允许我们像对待常规二维数组一样对其进行索引运算并打印出来。
阅读全文