C语言怎么在函数中用指针指向二维数组
时间: 2025-03-27 15:02:38 浏览: 74
### C语言中使用指针操作二维数组
在C语言中,可以通过多种方式使用指针来操作二维数组。下面展示一种常见的方式:利用指针指向每一行的一维数组。
#### 定义并初始化二维数组
首先创建一个简单的二维数组用于演示:
```c
#include <stdio.h>
#define ROWS 2
#define COLS 3
void printArray(int (*arr)[COLS], int rows) {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < COLS; ++j) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main() {
int myArray[ROWS][COLS] = {{1, 2, 3}, {4, 5, 6}};
// 打印原始数组
printArray(myArray, ROWS);
}
```
这段代码展示了如何定义一个`printArray`函数接受一个指向每行的指针,并打印出该二维数组的内容[^1]。
#### 使用指针遍历二维数组
接下来修改上述程序以显示如何通过指针访问和更改二维数组中的元素:
```c
#include <stdio.h>
#define ROWS 2
#define COLS 3
// 修改后的printArray函数可以接收任意列数的二维数组
void modifyAndPrintArray(int *ptr, int rows, int cols) {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
*(ptr + i * cols + j) += 10; // 对每个元素加10
printf("%d ", *(ptr + i * cols + j));
}
printf("\n");
}
}
int main() {
int myArray[ROWS][COLS] = {{1, 2, 3}, {4, 5, 6}};
// 将myArray转换成一维指针形式传入modifyAndPrintArray
modifyAndPrintArray((int *)myArray, ROWS, COLS);
return 0;
}
```
这里的关键在于理解表达式 `*(ptr + i * cols + j)` 的含义。它表示先移动到第`i`行的位置(`i*cols`)再加上偏移量`j`到达具体的元素位置[^2]。
#### 动态分配多维数组空间
当需要动态分配内存时,则可采用如下方法:
```c
#include <stdlib.h>
#include <stdio.h>
typedef struct {
size_t row_count;
size_t col_count;
double **data;
} matrix;
matrix createMatrix(size_t r, size_t c) {
matrix m = {.row_count=r,.col_count=c};
m.data = malloc(r * sizeof(double *));
for (size_t i=0;i<r;++i){
m.data[i]=malloc(c*sizeof(double));
}
return m;
}
void destroyMatrix(matrix *m) {
if (!m || !m->data) return ;
for (size_t i=0;i<m->row_count;++i)
free(m->data[i]);
free(m->data);
}
int main(){
matrix mat=createMatrix(3,4);
// 初始化矩阵...
destroyMatrix(&mat);
return 0;
}
```
此例子说明了怎样构建一个结构体封装动态分配的二维数组及其释放资源的过程[^3]。
阅读全文
相关推荐


















