c语言之指针数组理解一

来源:互联网 发布:windows 安装程序 编辑:程序博客网 时间:2024/05/20 14:26

直接给出demo和内存图进行分析

//打印指针数组/*这里为什么要定义为二级指针:首先,数组本身就是一个一级指针,在加上定义的是指针数组,也就是存储的数据是指针,所以是二级指针*/void PrintArryData(char** arry, int cnt){if (arry == NULL)return;for (int i = 0; i < cnt; i++){//arry:是数组的内存块地址,总共有cnt块,arry+i是指向下一个内存块printf("i= %d  value = %s\n", i, *(arry + i));}}//对指针数组进行排序void SortArryData(char** arry, int cnt){if (arry == NULL)return;char* tmp = NULL;for (int i = 0; i < cnt; i++){for (int j = i + 1; j < cnt; j++){if (strcmp(*(arry + i), *(arry + j)) < 0){tmp = *(arry + j);*(arry + j) = *(arry + i);*(arry + i) = tmp;}}}}void main(){/*定义了一个指针数组定义了一个指针数组,数组的有4个内存快,每个内存快的数据类型是指针可以看图1来认识指针数组的内存结构*/char* arry[] = { "rose_grils_1", "rose_grils_2", "rose_grils_3", "rose_grils_4" };//可以求出指针数组arry所占内存块的总量int totalSize = sizeof(arry);//因为这是指针数组,每个内存空间存储的是指针,这里可以求出每个内存块的大小int singleSize = sizeof(char*);//这里用总内存大小除以单个内存块的大小,可以求出总共有多少个内存块int cnt = totalSize / singleSize;//打印二级指针PrintArryData(arry, cnt);printf("*****************************\n");SortArryData(arry, cnt);PrintArryData(arry, cnt);system("pause");}

运行结果:

内存分析图:



0 0
原创粉丝点击