您的位置:首页 > 职场人生

黑马程序员---学习笔记8:数组指针

2015-08-20 13:00 330 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
——-

数组元素的指针就是数组元素的地址。

注意:

1)数组名不代表整个数组,而只是表示,数组的首地址

将数组名赋值给一个指针时,只是表示将数组首地址赋值给它,而不是把整个数组的内容赋值过去。

Int a[ 4]={1,2,3,4};

int* p=a;

int* p =&a[0]; //等价与上面那句

访问数组的元素:

1)p+1 表示指向数组的下一个元素 P+1*sizeof(int)

2)p-1 表示指向数组的下一个元素

*p++ 表示*(p++)=*p,

用数组指针遍历数组

for (int i=0; i<n; i++)

{

printf("%d\t",*p++);//先输出元素,然后指针后移一个数

注意:这里只有用指针可以,不能替换成数组名,这也是数组名和数组指针的最大的区别,数组名是常量不能变,而指针是变量

}

对于一维数组,获取a[i]的地址有几种方法?

1)&a[i]

2)a+i

3)int *p=a;p+i

一维指针数组:

一个数组元素的值是指针。

定义:

数组类型 * 数组名[数组长度]

指针数组的使用:

int a=3,b=4,c=5;

int *pa[3]={&a,&b,&c}

*pa==pa[0]=&a;

两个指针变量之间的运算:

1)减法运算

常见用法:两指针都指向同一个数组

i,判断两个指针指向的元素是否连续

ii,判断两个指针变量之间相隔几个元素。 (p-p1)/sizeof(int)

不能用加法运算,会越界的,减法时,也要是指向同一个数组的

2)关系运算

p1>p

1 p1在高位

0 P在高位,或是指向同一位置

二维数组中指针的理解:

对于二维数组,其中数组名和相应指针的关系理解起来会有困难,我 的一种理解方式是将二维数组考虑成三级地址索引的数据结构。第一级地址是数组名a(数组指针),通过a可以索引到二级地址a[0](行指针),通过行指针可以索引到三级地址&a[0][0],通过三级地址就能找到相应 的元素了。

举个例子,对于二维数组:a[3][4]

第一级地址中存储的只是行地址的地址,a表示第一行的行地址,a+1,找到的是第二行地址的地址,*(a+1)取出来的是第二行的首地址,*(a+1)+1,这个表示第二行第二列元素的地址;

注意:1)字符数组保存的字符串是保存到栈里面的,是可以进行修改的。但是数组名也就是数组的首地址是常量是不能修改的,也不能被赋值。

2)字符指针保存的字符串,只是字符串的地址,它指向的是常量区里的字符串,所以这个字符串是不能修改的,但是指针是变量,指针的指向可以修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: