【C语言提高25】二级指针做输入的第二种内存模型:二维数组
来源:互联网 发布:闪字风扇软件下载 编辑:程序博客网 时间:2024/05/16 18:51
打印 排序:
void main(){int i = 0,j=0;int num = 4;char tmpbuf[30] = {0};char myBuf[30] = {0};char myArray[10][30] = { "aaaaaa", "ccccc", "bbbbb", "1111111" };//打印for (i = 0; i < num; i++){printf("%s\n",myArray[i]);}//排序for (i = 0; i < num; i++){for (j = i + 1; j < num; j++){if (strcmp(myArray[i], myArray[j]) > 0)//前面的大 交换 {strcpy_s(tmpbuf,myArray[i]); //交换的是内存块 是拷贝strcpy_s(myArray[i],myArray[j]);strcpy_s(myArray[j],tmpbuf);}}}for (i = 0; i < num; i++){printf("%s\n", myArray[i]);}printf("\nhehhe");system("pause");return;}
封装成函数:
void printMyArray02(char myArray[10][30],int num){int i = 0;for (i = 0; i < num; i++){printf("%s\n", myArray[i]);// printf("%s\n", *(myArray+i));}}void sortArray02(char myArray[10][30], int num){int i = 0, j = 0;char tmpbuf[30] = { 0 };//排序for (i = 0; i < num; i++){for (j = i + 1; j < num; j++){if (strcmp(myArray[i], myArray[j]) > 0)//前面的大 交换 {strcpy_s(tmpbuf, myArray[i]); //交换的是内存块 是拷贝strcpy_s(myArray[i], myArray[j]);strcpy_s(myArray[j], tmpbuf);}}}}void main(){int num = 4;char myBuf[30] = { 0 };char myArray[10][30] = { "aaaaaa", "ccccc", "bbbbb", "1111111" };//myArray: 编译器只会关心 有10行 每行30列 所以myArray+1 会直接往跳一行 30个单元 //myArray[i] *(myArray+i)对于二维数组 它们直接加相应的行数 这就是多维数组名的本质 名加1代表增加相应的行数 {int len1 = sizeof(myArray); //300 这是求出这数据类型的总大小int len2 = sizeof(myArray[0]);//30 这样是求每一行的大小//int len2 = sizeof(myArray[0][0]);//1 这样才是求每一个元素的大小int size = len1 / len2;//10 所以求出的是行数printf("size:%d\n", size);}printMyArray02(myArray, num);sortArray02(myArray,num);printMyArray02(myArray, num);printf("\nhehhe");system("pause");return;}
但是调用第一种内存模型的printMyArray01是错误的:
void printMyArray01_err(char**myArray, int num){int i = 0;for (i = 0; i < num; i++){printf("%s\n", myArray[i]);}}
问题的本质是:二级指针做输入的第一种内存模型 myArray+1
二级指针做输入的第二种内存模型 myArray+1 不一样
原因在于多维数组名的本质是一个数组类型的指针 并不是二级指针
0 0
- 【C语言提高25】二级指针做输入的第二种内存模型:二维数组
- 【C语言提高26】二级指针做输入的第三种内存模型:手工打造二维内存
- 【C语言提高24】二级指针做输入的第一种内存模型:数组指针
- 二维数组(二级指针的第二种内存模型)
- 【C语言提高23】二级指针做输出的内存模型
- 数组指针(二级指针的第二种内存模型)
- C语言中,二级指针的三种内存模型
- C语言中的二级指针的三种内存模型
- 【C语言提高27】二级指针三种内存模型总述
- C语言的二维数组和二级指针的理解
- C语言的二级指针与二维数组
- 神奇的C语言三:二维数组与二级指针
- C语言的二级指针与二维数组
- 二级指针做输入的3种模型-1
- 二级指针做输入的3种模型-2
- 二级指针做输入的3种模型-3
- C/C++学习之C提高-----非空格的字符串长度、去掉字符串前后空格、字符串反转、键值对字符串、const练习、二级指针做输入/输出的特性、将字符串按逗号分开,并放入二维数组打印出来
- day4_二级指针做输入输出的三种内存模型
- 【Leetcode】Contains Duplicate II
- linux下 jdk1.8安装
- JAVA验证URL是否有效连接的方法
- [LeetCode]008-String to Integer
- 大家快来A水题
- 【C语言提高25】二级指针做输入的第二种内存模型:二维数组
- 学习日志,面向对象第一天(类和对象、封装、this关键字)
- 最大流最小割定理(max flow/min cut theory)
- 开源实时日志分析ELK平台部署
- c#中常用的集合类型及基本用法
- 字典树
- Spring源码阅读3-bean获取-下
- 超详细图文讲解android studio导入第三方类库的方法
- Objective-C 零散知识笔记 by STP