day4_二级指针做输入输出的三种内存模型
来源:互联网 发布:遥感数据预处理方法 编辑:程序博客网 时间:2024/05/17 01:33
一、第一种内存模型
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#include <windows.h>//二级指针做输入的第一种内存模型int main41(){ int i = 0; int j = 0; int num = 0; char *tmp = NULL; //数组的每一个元素是指针 myArray是指针数组 char *myArray[] = {"aaaa","bbbb","cccc","1111"}; num = sizeof(myArray)/sizeof(myArray[0]); printf("排序之前:\n"); for(i = 0; i<num; i++) {// printf("%s \n",myArray[i]); printf("%s \n",*(myArray + i)); } //排序 //改变的是指针的指向 没有改变指针所指向的内存空间 for(i = 0; i<num; i++) { for(j = 0; j<num; j++) { if(strcmp(myArray[i],myArray[j]) > 0) { tmp = myArray[i]; //交换的是数组元素 即指针的值 myArray[i] = myArray[j]; myArray[j] = tmp; } } } printf("排序之后:\n"); for(i = 0; i<num; i++) { printf("%s \n",*(myArray + i)); } system("pause"); return 0;}//函数封装void printmyArray11(char **myArray,int num){ int i = 0; for(i = 0; i<num; i++) { //printf("%s \n",myArray[i]); printf("%s \n",*(myArray + i)); }}//排序 //改变的是指针的指向 没有改变指针所指向的内存空间void sortmyArray(char **myArray,int num){ int i = 0; int j = 0; char *tmp = NULL; for(i = 0; i<num; i++) { for(j = 0; j<num; j++) { if(strcmp(myArray[i],myArray[j]) > 0) { tmp = myArray[i]; //交换的是数组元素 即指针的值 myArray[i] = myArray[j]; myArray[j] = tmp; } } }}int main(){ int num = 0; //数组的每一个元素是指针 指针数组 char *myArray[] = {"aaaa","bbbb","cccc","1111"}; num = sizeof(myArray)/sizeof(myArray[0]); printf("排序之前:\n"); printmyArray11(myArray,num); //排序 sortmyArray(myArray,num); printf("排序之后:\n"); printmyArray11(myArray,num); system("pause"); return 0;}
二、第二种内存模型
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#include <windows.h>//二级指针做输入的第2种内存模型//打印 排序//封装成函数int main51(){ int i = 0; int j = 0; int num = 4; char mybuf[30]; char tmpbuf[30]; char myArray[10][30] = {"aaaa","bbbb","cccc","2222"}; //编译器只关心有10行30列 myarray+1跳30个字节 多维数组名的本质 //打印 printf("排序之前:\n"); 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(tmpbuf,myArray[i]);//交换的是内存块 strcpy(myArray[i],myArray[j]); strcpy(myArray[j],tmpbuf); } } } printf("排序之后:\n"); for(i = 0; i<num; i++) { printf("%s \n",myArray[i]); } system("pause"); return 0;}//函数封装//打印void printmyArray51_error(char **myArray,int num){ int i = 0; for(i = 0; i<num; i++) { //问题的本质是:第二种myArray + i和第一种myArray + i不一样 //指针的步长不一样 即指针所指向的内存空间数据类型不一样 printf("%s \n",*(myArray + i)); }}void printmyArray51(char myArray[10][30],int num){ int i = 0; for(i = 0; i<num; i++) { printf("%s \n",*(myArray + i)); }}//交换的是内存块void sortmyArray02(char myArray[10][30],int num){ int i = 0; int j = 0; char tmpbuf[30]; for(i = 0; i<num; i++) { for(j = i+1; j<num; j++) { if(strcmp(myArray[i],myArray[j]) > 0) { strcpy(tmpbuf,myArray[i]);//交换的是内存块 strcpy(myArray[i],myArray[j]); strcpy(myArray[j],tmpbuf); } } }}int main(){ int num = 4; char myArray[10][30] = {"aaaa","bbbb","cccc","2222"}; printf("排序之前:\n"); printmyArray51(myArray,num); //排序 sortmyArray02(myArray,num); printf("排序之后:\n"); printmyArray51(myArray,num); system("pause"); return 0;}
三、第三种内存模型
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#include <windows.h>//二级指针做输入的第3种内存模型//int main61(){ char **p2 = NULL; int i = 0; int j = 0; int num = 5; char *tmp = NULL; p2 = (char **)malloc(sizeof(char *)*num); for(i = 0; i<num; i++) { p2[i] = (char *)malloc(sizeof(char)*100); sprintf(p2[i],"%d%d%d",i+1,i+1,i+1); } printf("排序之前:\n"); for(i = 0; i<num; i++) { printf("%s \n",p2[i]); } //排序 交换的是指针 for(i = 0; i<num; i++) { for(j = i+1; j<num; j++) { if(strcmp(p2[i],p2[j]) < 0) { tmp = p2[i]; p2[i] = p2[j]; p2[j] = tmp; } } } printf("排序之后:\n"); for(i = 0; i<num; i++) { printf("%s \n",p2[i]); } //释放内存 for(i = 0; i<num; i++) { if(p2 != NULL) { free(p2[i]); p2[i] = NULL; } } if(p2[i] != NULL) { free(p2[i]); } system("pause"); return 0;}//函数封装//分配内存char **getMen61(int num){ char **p2 = NULL; int i = 0; p2 = (char **)malloc(sizeof(char *)*num); if(p2 == NULL) { return; } for(i = 0; i<num; i++) { p2[i] = (char *)malloc(sizeof(char)*100); sprintf(p2[i],"%d%d%d",i+1,i+1,i+1); } return p2;}//打印void printmyArray61(char **myArray,int num){ int i = 0; for(i = 0; i<num; i++) { printf("%s \n",*(myArray + i)); }}//排序void sortmyArray61(char **myArray,int num){ int i = 0; int j = 0; char *tmp = NULL; for(i = 0; i<num; i++) { for(j = 0; j<num; j++) { if(strcmp(myArray[i],myArray[j]) > 0) { tmp = myArray[i]; //交换的是数组元素 即指针的值 myArray[i] = myArray[j]; myArray[j] = tmp; } } }}//释放内存void getMen61_free(char **p2,int num){ int i = 0; for(i = 0; i<num; i++) { if(p2 != NULL) { free(p2[i]); p2[i] = NULL; } } if(p2[i] != NULL){
free(p2[i]); }}int main(){ char **p2 = NULL; int num = 5; char tmpbuf[100]; //分配内存 p2 = getMen61(num); printf("排序之前:\n"); printmyArray61(p2,num); //排序 交换的是内存 sortmyArray61(p2,num); printf("排序之后:\n"); printmyArray61(p2,num); //释放内存 getMen61_free(p2,num);//p2是一个野指针 system("pause"); return 0;}
阅读全文
0 0
- day4_二级指针做输入输出的三种内存模型
- day4_二级指针的内存模型
- 二级指针的三种内存模型
- 二级指针的三种内存模型
- 二级指针的三种内存模型
- 二级指针的三种内存模型
- 04二级指针三种内存模型
- 二级指针三种内存模型
- C语言中,二级指针的三种内存模型
- C语言中的二级指针的三种内存模型
- 二级指针输入模型(三种内存模型)
- 二级指针的第三种内存模型
- 二级指针的3种内存模型
- 二级指针的3种内存模型
- 二级指针的内存模型
- 二级指针三种内存模型强化训练
- 【C语言提高25】二级指针做输入的第二种内存模型:二维数组
- 二级指针的三种内存模型的整理与分析
- 平衡二叉树
- 数据库操作练习12
- Chrome 浏览器中查看 webSocket 连接信息
- dp做题集锦(持续更新中)
- 什么是ORM?
- day4_二级指针做输入输出的三种内存模型
- 堆棋子失败程序(本程序用途:学习c++语法和知识点)
- 文档设置标记
- Vijos1243:生产产品(单调队列优化dp)
- 千镜屋
- SQL Server常用快捷键
- ChainerCV︱堪比Opencv--深度学习工具库(Faster R-CNN、SSD 和 SegNet)
- 从狡猾的房产中介来看动态代理
- 素数的判定(筛法&&others)