android获取指针空间大小_Cpp 指针与数组详解

本文详细介绍了数组和指针的关系,包括一维数组和二维数组的存储结构,以及如何通过指针访问数组元素。通过实例展示了如何使用指针遍历一维和二维数组,并解释了指针在遍历数组时的作用。此外,还探讨了字符数组和指针的结合,以及如何使用指针连接两个字符数组。最后,提到了不同编译器环境下指针和数组操作的差异。
摘要由CSDN通过智能技术生成
228e3cb1cb7dd887738c80f5fba9f6e5.png

数组

数组是同名、同类型元素的有序集合,被顺序存放在一个连续的内存中,而且每一个元素的存储空间的大小相同。

数组的存储

一维数组的存储结构是线性的,所以数组元素按照下标值有小到大的顺序依次存放在一块连续的内存中,即数组的内存。

对于二维数组,用矩阵方式存储元素,在内存中仍然是线性结构。

注:

数组中第一个元素的存储地址就是整个数组的存储地址,该地址放在数组名中。

d764f944f00fc9c5651664982ce69cf1.png

指针与一维数组

系统需要提供一定量连续的内存来存储数组中的各元素,内存都有地址。

指针变量即存放地址的变量,如果把数组的地址赋给指针变量,就可以通过指针变量来引用数组。

引用数组元素2大方法:

1.下标法

int a[5]; //声明数组变量a[0]=1; //给a数组的第0个元素赋值a[0]; //即a数组的第0 个元素

2.指针法

int a[5] ; //声明数组变量int *p ; //声明指针变量p=&a[0]; //将a[0] 元素的地址赋值给指针变量

注:

p指向数组a的第0号元素的地址。

1b8b320b0507b8a5a805ce637688df3a.png

实例:通过指针变量获取数组中的元素

/*通过指针变量获取数组中的元素*/#includeusing namespace std;void main(){int a[5];int *p;int i;a[0] = 0;a[1] = 1;a[2] = 2;a[3] = 3;a[4] = 4;a[5] = 5;p=&a[0];for(i=0;i<=5;i++,p++) //循环增加指针地址cout<

结果为:

cbfca3ea3b7b709fbbced4489266b6d5.png

通过数组名获取首元素地址

/*通过数组名获取首元素地址*/#includeusing namespace std;void main(){int a[5];int *p;int i;for(i=0;<5;i++)a[i]=i;p=a;//输出首地址cout<结果为:
5e9a9ed728a1c2b0703265171a0712bc.png

指针与二维数组

二维数组的内存地址也是连续的。二维数组是一维数组的变体。二维数组的存储是按层累加的。

19cf218fcc5db08a7f11cd8e4bc99051.png

实例:将多维数组转化为以为数组

/*将多维数组转化为以为数组*/#include using namespace std;void main(){int twoarray[2][3]={{1,2,3},{4,5,6}}; //数组赋值int onearray[6] ={0}; //声明变量并赋值int row,col ,i;for(row=0;row<2,row++){ for(col =0 ;col<3;col++){ cout<

结果为:

cfa227c42f3b1acd15c8b22ce89f411d.png

指针的作用

遍历数组数组指针字符指针函数指针...

实例:指针遍历2维数组

/*指针遍历2维数组*/#include #include //manip是manipulator(操纵器)using namespace std;void main(){int twoarray[2][3]={1,2,3,4,5,6}; //定义数组并赋值int *p ;p=twoarray[0];for (int i=0;i

结果为:

5f4e7263c62263dc1f5c80fcad368d67.png

注:

#include: io:input/output ;manip:manipulator(操纵器)

#include作用:

对cin,cout之类的一些操纵运算子:dec 置基数为10 相当于"%d"hex 置基数为16 相当于"%X"oct 置基数为8 相当于"%o"setfill( 'c' ) 设填充字符为csetprecision( n ) 设显示有效数字为n位setw( n ) 设域宽为n个字符

使用数组地址输出二维数组

/*使用数组地址输出二维数组*/#include #include //manip是manipulator(操纵器)using namespace std;void main(){int twoarray[2][3]={{1,2,3},{4,5,6}};//定义数组 并赋值int i ,j;for (i=0;i<2;i++) //行{for (j=0;j<3;j++){cout<

结果为:

fe5ddb93caab216448a593f9c5d8f943.png

指针与字符数组

字符数组是一个一维数组,使用指针同样也可以引用字符数组。引用字符数组的指针叫字符指针。

字符指针指向的是字符型内存空间的指针变量。字符数组就是一个字符串。

char *p ; char *string ="https://www.toutiao.com/c/user/50102795912/#mid=1611769551535107";//等价char *q ;q ="剑云锋 ";

指针与字符数组的应用

连接两个字符数组
#includeusing namespace std;void main(){ char str1[30]; char str2[20]; char *p1; chat *p2;p1=str1;p2=str2;cout<

输入字符: 剑云锋欢迎你们 + 谢谢!

结果为:

3b2221925fb2d739934bef74519da35b.png

注:

VS2015使用的是新C标准,也就是C11,而VC6.0用的是老标准。

在新标准中,应该是用gets_s代替gets

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值