首页 > 其他 > 详细

指针知识(二):指针与数组

时间:2014-03-11 15:36:27      阅读:422      评论:0      收藏:0      [点我收藏+]

 

数组的概念与指针的概念联系非常解密。其实数组的标识相当于它的第一个元素的地址,如:int a[5],数组名a指向它的第一个元素a[0]的地址。

有语句如下:

int  a[5];
int * p;

 

 

下面的赋值为合法的:

p = a;

这里指针p 和a 是等价的,它们有相同的属性,唯一的不同是我们可以给指针p赋其它的数值,而a 总是指向被定义的5个整数组中的第一个。所以,p只是一个普通的指针变量,而与之不同,a 是一个指针常量(constant pointer),数组名的确是一个指针常量。因此虽然前面的赋值表达式是合法的,但下面的不是:

a = p;

因为a 是一个数组(指针常量),常量标识不可以被赋其它数值。

由于变量的特性,以下例子中所有包含指针的表达式都是合法的:

#include <iostream>

using namespace std;

int main()

{

int a[5];
int *p;
p = a;      //p是a[0]的地址,因a指向a的首地址,即指向a[0],
*p = 10;    //即a[0]=10
p++;
*p = 20;      //a[1]=20
p = &a[2];
*p = 30;      //a[2]=30;
p = a +3;
*p = 40;      //a[3]=40
p = a;
*(p+4) = 50;   //a[4]=50

for(int n=0; n<5; n++)
{
cout<<a[n]<<", ";
}
cout<<‘\n‘;

}

 
输出:10, 20, 30, 40, 50,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

括号[]来指明我们要引用的数组元素的索引(index)。中括号[]也叫位移(offset)操作符,它相当于在指针中的地址上加上括号中的数字。

例如,下面两个表达式互相等价:

a[5] = 0; // a [offset of 5] = 0
*(a+5) = 0; // pointed by (a+5) = 0

不管a 是一个指针还是一个数组名, 这两个表达式都是合法的。

指针知识(二):指针与数组,布布扣,bubuko.com

指针知识(二):指针与数组

原文:http://www.cnblogs.com/guozqzzu/p/3592405.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!