C语言定义并初始化一个二维数组(利用二级指针)
1.代码如下
#include <stdio.h>
#include <stdlib.h>
int main() {
// m, n表示数组的行数和列数
int m, n;
scanf("%d %d", &m, &n);
// p是一个二级指针,使用malloc函数初始化。注意p指向的是一个指针,所以sizeof操作符的操作数是int*,表示分配一个int型指针的内存空间
// 分配m个int型指针所占用的内存空间,并将这片内存空间的基地址(首个元素的地址)返回给二级指针p
int** p = (int**)malloc(sizeof(int*) * m);
// p[i]是一个指针,每一轮循环都分配n个int型大小的内存空间,并将这片内存空间的首地址返回给p[i]
for ( int i = 0; i < m; i++) {
p[i] = (int*)malloc(sizeof(int) * n);
}
// 为二维数组的每一个元素赋值
for ( int i = 0; i < m; i++) {
for ( int j = 0; j < n; j++) {
scanf("%d", &p[i][j]);
}
}
// 打印每一个二维数组的元素
for ( int i = 0; i < m; i++) {
for ( int j = 0; j < n; j++) {
printf("p[%d][%d]=%d ", i, j, p[i][j]);
}
printf("\n");
}
// 释放指针p[i]指向的内存空间,并将指针的值置为0
for ( int i = 0; i < m; i++) {
free(p[i]);
p[i] = NULL;
}
// 释放二级指针p指向的内存空间,并将指针的值置为0
free(p);
p = NULL;
return 0;
}
2.输入输出测试
第一行输入二维数组的行和列
3.代码可视化(pythontutor.com)
在这个网站上无法进行scanf的输入, 因此需要对代码做一写改动才可以在pythontutor.com上运行并可视化。