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 \n", 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("排序之前:\n");
printArray(arrayData, 5);
printf("排序之后:\n");
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\n",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("排序之前----:\n");
printArray2(arrayData, 5);
sortArray(arrayData, 5);
printf("排序之后----:\n");
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\n",arrayData[i]);
}
}
int main(){
int num = 10;
//在堆中申请内存空间
char **arrayData = (char **)malloc(num * sizeof(char*));//相当于char array[10]; ;
if (arrayData == NULL){
printf("分配内存失败\n");
return 0;
}
for (int i = 0; i < num; i++){
arrayData[i] = (char*)malloc(100 * sizeof(char));
if (arrayData[i] == NULL){
printf("分配二维数组内存失败\n");
return 0;
}
//将数据打到缓存中
sprintf(arrayData[i], "%d,%d,%d,%d", i + 5, i * 2, i * 3, i*i*i);
}
//打印出数据
printf("二维数组和二维指针的第三种用法:\n");
printArray3(arrayData, num);
system("pause");
return 0;
}
运行结果: