二维数组在C语言中作用,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 \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;

}

运行结果:

0818b9ca8b590ca3270a3433284dd417.png

3.二级指针的第二种内存模型:

/**

作者:一叶扁舟

时间: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;

}

运行结果:

0818b9ca8b590ca3270a3433284dd417.png

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;

}

运行结果:

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值