数组和指针的区别与联系

指针和数组基本等价的原因在于指针算术和C++内部处理数组的方式。整型变量加一后,其值将增加一;而指针变量加一后,增加的量等于它指向的类型的字节数;此外,C++将数组名解释为地址。

多数情况下,C++将数组名解释为数组首元素的地址

对于数组加下标的形式,例如arr[1],C++编译器将其看作是*(arr + 1),如果使用的是指针,C++执行同样的操作。因此多数情况下我们可以以相同的方式使用指针名和数组名,可以使用数组方括号表示法,也可以使用解引用符号(*)。在多数表达式中他们都表示地址。

区别之一是,指针的值可以修改,而数组名是常量

另一个区别是,对数组应用sizeof运算符得到的是数组长度,而对指针应用sizeof得到的是指针的长度,即使指针指向的是一个数组。

数组名被解释为数组首元素的地址,对数组名取地址,得到的是整个数组的地址。

下面是对指针和数组做的一些总结:

1,声明指针 :typeName * pn = pointerName;

2,给指针赋值:对变量名取地址可以获得被命名内存的地址,new运算符返回未命名的内存的地址;

3,对指针解引用:对指针解引用意味着获得指针指向的值;

4,数组名一般情况下表示数组首元素的地址,但是对数组名取地址时,表示整个数组的地址。

5,sizeof关键字时用于数组名,计算数组的大小时,通常使用sizeof(arr)/sizeof(arr[0])

6,数组的大小必须指定且必须大于零,如果给数组中的一部分初始化,则其他未初始化的部分被初始化为零。

7,对于字符型数组,结尾处是以'\0'结尾的。例如:char a[]={"Hello"};//按字符串初始化,sizeof(arr)大小为6.

在这里解释一下sizeof和strlen的区别,strlen计算的是字符串的有效长度,不包含字符串结尾的'\0',而sizeof则是计算整个数组所有元素;两者只在字符型数组中有联系。因此在上例字符数组中,sizeof(arr)= 6;而strlen(arr)= 5;

图二计算strlen出现19的情况是由于strlen在数组b[]中没找到'\0',就越界去找,直到找到'\0'才结束,所以返回了一个大于五的整数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值