二级指针内存模型
来源:互联网 发布:10天学会单片机百度云 编辑:程序博客网 时间:2024/05/17 23:14
第一种内存模型
#include<iostream>#include<string>#include<stdlib.h>#include<stdio.h>/*二级指针内存模型*/using namespace std;/*第一种内存模型*/void printarray1(char **str)//实参*str[]退化成**str{ char * temp = NULL;//temp是在栈区申请的一个指针变量 for( int i = 0;i<5;++i) { for(int j = i+1;j<5;++j) { if(*str[i]>*str[j])//如果str[i][0]大于str[j][0] { temp = str[i];//指针str指向的地址赋3值给temp str[i] = str[j];//指针str指向的地址赋3值给str str[j] = temp;//指针temp指向的地址赋3值给str } } }}void main1() //第一种内存模型 char *str[]{ char * str[] = {"1111" ,"4444", "3333","2222" ,"5555"}; // 指针数组:str是一个存放5个指针变量的数组,这5个指针变量在栈区申请。每一个指针变量str[i]指向一个常量内存块,该内存块里面存放“1111” cout<< sizeof(str)<<endl;//大小为20,每个指针大小为4,str指针数组里面有5个指针 cout<< "before select:"<<endl; for(int i = 0;i<5;++i) { cout<<str[i]<<endl; } printarray1(str); cout<< "after select:"<<endl; for(int i = 0;i<5;++i) { cout<<str[i]<<endl; //依次输出5个指针变量指向的地址的内容,指针变量的顺序已改变 } system( "pause");}
第二种内存模型
/*第二种内存模型*///实参str退化成p[5][5]//p实际上是一个指向数组的数组指针 对p[i]进行操作相当于对str[i]进行操作void printarray2(char p[5][5]){ char buf[5];//在栈区申请5个char单位的内存 for(int i = 0;i<5;++i) { for(int j = i+1;j<5;++j) { if(p[i][0]>p[j][0]) { strcpy(buf,p[i]); strcpy(p[i],p[j]); strcpy(p[j],buf); } } }}void main2() //第二种内存模型 str[][5]{ char str[][5] = {"1111" ,"4444", "3333","2222" ,"5555"}; //从栈区申请一段4*5的内存块 cout<< sizeof(str)<<endl;//str的大小为20 20*1 cout<< "before select:"<<endl; for(int i = 0;i<5;++i) { cout<<str[i]<<endl; } printarray2(str); cout<< "after select:"<<endl; for(int i = 0;i<5;++i) { cout<<str[i]<<endl; } system( "pause");}
第三种内存模型
/*第三种内存模型*/void printarray3(char **p){ char buf[5];//在栈区申请一段内存 for(int i = 0;i<10;++i) { for(int j = i+1;j<10;++j) { if(*p[i]<*p[j])//比较str[i][0]和str[j][0] { strcpy(buf,p[i]); //交换指针buf和str[i]指向的地址 strcpy(p[i],p[j]); //交换指针str[i]和str[j]的地址 strcpy(p[j],buf); //交换指针str[j]和buf的地址 } } }}void main3(){ char ** str = new char *[10]; //在栈区申请一个指针变量str,在堆区申请一段内存,里面存放了10个char型指针。str指向这a一段内存 for(int i = 0;i<10;i++) { str[i] = new char [10];//str[i]是一个指针,在堆区申请了10个char型单位内存。str[i]指向这a一段内存 sprintf(str[i], "%d%d%d",i,i,i); //把"%d%d%d",i,i,i打印到str[i]里 } cout<< "before select:"<<endl; for(int i = 0;i<10;i++) { cout<<str[i]<<endl; } printarray3(str); cout<< "after select:"<<endl; for(int i = 0;i<10;i++) { cout<<str[i]<<endl; } for( int i = 0;i<10;i++) { delete str[i];//释放str[i]指向的那一段内存 } if(str!=NULL) delete str;//释放str指向的那一段内存 system( "pause");
对参数的指针类型应该怎么理解,理解的角度需要从两个角度出发
第一个角度:站在编译器的角度 对形参,如果是指针类型,编译器只会把它当作一个指针变量来看。(分配四个自己的内存)
第二个角度:我们只有在使用指针所指向的内存空间的时候,我们才去关心内存是一维的,还是二维的
0 0
- 二级指针内存模型
- 二级指针内存模型
- day2 内存模型 二级指针
- 二级指针的内存模型
- 二级指针及其内存模型初探
- 二级指针的第三种内存模型
- 二级指针的3种内存模型
- 二级指针的三种内存模型
- 二级指针的三种内存模型
- 二级指针第三种内存模型
- 二级指针的三种内存模型
- 二级指针的3种内存模型
- 04二级指针三种内存模型
- 二级指针三种内存模型
- day4_二级指针的内存模型
- 二级指针的三种内存模型
- 二级指针输入模型(三种内存模型)
- 数组指针(二级指针的第二种内存模型)
- cocoapods
- tsql default values, check current isolation level, check db object last update time
- 阶乘的长度
- boost 安装
- Mysql数据库常用语句笔记
- 二级指针内存模型
- 帧动画
- 全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
- 关于layout布局中的变量
- 夏日饮食安全小调整
- 项目NDK配置
- SQL Server AlwaysOn架构及原理
- Oracle下的Databse,Instance,Schemas
- 待整理文档