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

七分热度_HD 2015-08-12 05:00:39
数组元素的指针就是数组元素的地址。
注意:
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)字符指针保存的字符串,只是字符串的地址,它指向的是常量区里的字符串,所以这个字符串是不能修改的,但是指针是变量,指针的指向可以修改。
...全文
341 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,158

社区成员

发帖
与我相关
我的任务
社区描述
在CSDN学院遇到的问题反馈及对学院的改进建议等。
社区管理员
  • 软件培训社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧