C语言的二维数组和二级指针的理解
1.数组本质
int a[5] 一维数组名代表数组首元素的地址
int a[5] ===> a的类型为int*
二维数组名同样代表数组首元素的地址
int b[2][5]===>b的类型为int(*)[5]
注:二维数组名 char array[10][100] 是一个数组指针,char (*)[100]
2.二级指针的第一种内存模型:
/** 作者:一叶扁舟 时间:23:03 2016/8/20 作用:练习二维数组的第一种内存模型理解 **/ #include"stdio.h" #include "stdlib.h" #include "string.h" //输出二维数组的数据 void printArray(char **myArray, int num){ for (int i = 0; i < num; i++){ printf("%s ", myArray[i]); } } //从大到小的排列 void sortArray(char **myArray, int num){ char *temp; for (int i = 0; i < num; i++){ for (int j = i + 1; j < num; j++){ if (strcmp(myArray[i], myArray[j])>0){ temp = myArray[i]; myArray[i] = myArray[j]; myArray[j] = temp; } } } } int main(){ //二维数组指针 char *arrayData[] = { "315", "3415", "afaaa", "9888", "addddd" }; printf("排序之前: "); printArray(arrayData, 5); printf("排序之后: "); sortArray(arrayData, 5); printArray(arrayData, 5); system("pause"); return 0; }
运行结果:
/** 作者:一叶扁舟 时间:20:00 2016/8/21 作用:二维数组的第二种理解 **/ #include"stdio.h" #include "stdlib.h" #include "string.h" //输出函数 void printArray2(char arrayData[10][100],int num){ for (int i = 0; i < num; i++){ printf("%s ",arrayData[i]); } } //字符串排序函数 void sortArray(char arrayData[10][100], int num){ char buff[100]; for (int i = 0; i < num; i++){ for (int j = i + 1; j < num; j++){ if (strcmp(arrayData[i], arrayData[j])>0){ strcpy_s(buff, arrayData[i]); strcpy_s(arrayData[i], arrayData[j]); strcpy_s(arrayData[j], buff); } } } } int main(){ //二维数组指针 char arrayData[10][100] = { "34d15", "3415", "afaaa", "9888", "addddd" }; printf("排序之前----: "); printArray2(arrayData, 5); sortArray(arrayData, 5); printf("排序之后----: "); printArray2(arrayData, 5); system("pause"); return 0; }
运行结果:
4.二级指针的第三种内存模型:
/** 作者:一叶扁舟 时间:20:44 2016/8/21 作用:二维数组和二维指针的第三种理解 **/ #include"stdio.h" #include "stdlib.h" #include "string.h" void printArray3(char **arrayData,int num){ for (int i = 0; i < num; i++){ printf("%s ",arrayData[i]); } } int main(){ int num = 10; //在堆中申请内存空间 char **arrayData = (char **)malloc(num * sizeof(char*));//相当于char array[10]; ; if (arrayData == NULL){ printf("分配内存失败 "); return 0; } for (int i = 0; i < num; i++){ arrayData[i] = (char*)malloc(100 * sizeof(char)); if (arrayData[i] == NULL){ printf("分配二维数组内存失败 "); return 0; } //将数据打到缓存中 sprintf(arrayData[i], "%d,%d,%d,%d", i + 5, i * 2, i * 3, i*i*i); } //打印出数据 printf("二维数组和二维指针的第三种用法: "); printArray3(arrayData, num); system("pause"); return 0; }
运行结果:
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 为什么不能用二级指针直接指向二维数组
- 下一篇: 二级指针与二维数组