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

——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)字符指针保存的字符串,只是字符串的地址,它指向的是常量区里的字符串,所以这个字符串是不能修改的,但是指针是变量,指针的指向可以修改。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值