C语言数组指针,指针数组,如何通过指针引用二维数组?
时间: 2024-11-10 22:13:24 浏览: 11
举例理解C语言二维数组的指针指向问题
5星 · 资源好评率100%
在C语言中,数组指针是一种特殊的指针类型,它实际上是指向数组的第一个元素的地址。当你有一个二维数组时,可以得到它的行指针(即指向每一行第一个元素的指针),这种行为也称为“间接数组”:
```c
int matrix[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
int* row_ptr[3]; // 创建一个指针数组,用于存放每行的首地址
for (int i = 0; i < 3; i++) {
row_ptr[i] = matrix[i]; // 对于每行,将行指针指向对应的元素
// 现在可以通过row_ptr[i]访问到第i行的所有元素
printf("Row %d: ", i);
for (int j = 0; j < 4; j++) {
printf("%d ", *(row_ptr[i] + j)); // 通过指针+索引来访问矩阵中的元素
}
printf("\n");
}
```
在这个例子中,`row_ptr`数组保存了矩阵的行指针,我们可以通过它们逐个访问二维数组。
另一方面,如果你有一个指针数组,它包含的是每个元素的指针,那就不算是二维数组,而是每个元素都有一个独立的地址。例如:
```c
int* ptrs[3][4];
// 初始化ptrs
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
ptrs[i][j] = &matrix[i * 4 + j]; // 每个元素都分配单独的指针
}
}
// 通过指针数组访问矩阵
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", *ptrs[i][j]); // 直接通过指针访问矩阵中的元素
}
printf("\n");
}
```
阅读全文