在学Java数组的时候发现和C语言的有挺大的区别尤其是在指针方面 所以就想记录一下自己的一些想法
#include <stdio.h>
#include <malloc.h>
void Create(int* *arr);
void Swap(int* *arr);
void Print(int* *arr);
void Delete(int* *arr);
int main(void) {
// 对于指针表达式的阅读规则:从右到左 由近到远 括号优先
// 所以这里是创建了一个用来指向整型指针的指针变量
int* *arr = (int**)malloc(sizeof(int*) * 2);
Create(arr);
Print(arr);
Swap(arr);
Print(arr);
Delete(arr);
return 0;
}
// 给arr指针(指针数组)的每一个元素(指针)分配空间
void Create(int* *arr) {
for(int i = 0; i < 2; i++) {
arr[i] = (int*)malloc(sizeof(int) * 3);
}
printf("二维数组初始化完毕..\n");
}
// 给每一个元素赋值
void Swap(int* *arr) {
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 3; j++) {
printf("请输入第[%d][%d]个数据\n", i, j);
scanf("%d", &arr[i][j]);
}
}
printf("数据输入完毕..\n");
}
// 打印元素
void Print(int* *arr){
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 3; j++) {
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
// 释放空间
void Delete(int* *arr) {
for(int i = 0; i < 2; i++) {
free(arr[i]); // 释放每个手动创建的一维数组指针
}
free(arr); // 释放手动创建的二维数组指针
printf("程序结束 释放空间..\n");
}
结果如下: