1.数组指针:即指向数组的指针
那么, 如何声明一个数组指针呢?
int (* p)[10]; /*括号是必须写的,不然就是指针数组;10是数组的大小*/
1
拓展:有指针类型元素的数组称为指针数组。
2.通过指针引用数组元素的基本方法
(1)小标法:a[i]。
(2)指针法:* (a+i) 或 * (p+i) 或 p[i]。其中,a是数组名,p=a,即p指向数组a首元素的地址。
问:为什么* (a+i) 和* (p+i)是等价的,或者说是引用的同一个数组元素呢?
答:在C语言中,数组名代表的是数组中首元素的地址。在程序编译时,a[i]是按*(a+i)处理的,即按数组元素的首地址加上相应位移量i找到新元素的地址。而p=a,即p是指向数组a的首元素的地址,因此是等价的。从这里可以看出,[ ]实际上是变地址运算符,即将a[i]按a+i计算地址,然后找此地址单元中的值。
问:为什么p[i] 和* (p+i)是等价的,或者说是引用的同一个数组元素呢?
答:C语言规定,当指针变量指向数字元素时,指针变量可以带下标。而在程序编译时,对此下标处理的方法是转换为地址,即对p[i] 处理成 (p+i)。同上,[ ]是变址运算符。
3.利用指针引用数组元素
(1)p++; *p;
(2)*p++;等价于*(p++);因为++和*的优先级一样,故结合方向是从右向左。
(3)*(p++);和*(++p);二者是有区别的。前者是先取*p的值,然后p加1;后者是先p加1,再取p的值。即如果p指向的是数组a元素a[0],则前者得到a[0]的值,后者得到a[1]的值。
(4)++(*p);将p指向的元素的值加1。
(5)如果p指向元素a[i],
*(p--);先得到p指向的地址的元素a[i],然后p减1。
*(++p);执行结果得到a[i+1],p加1。
*(–p);执行结果得到a[i-1],p减1。
4.利用指针输出数组元素
int a[10];
int * p;
p = a;
while(p<a+10)
printf("%d",*p++);


int a[10];
int * p;
p = a;
while(p<a+10)
{
printf("%d",*p);
p++;
}


int a[10];
int * p;
p = a;
for(i=0;i<10;i++)
printf("%d",*p++);


int a[10];
int * p;
for(p=a;p<a+10;p++) /*比较专业的写法,代码简洁、高效*/
printf("%d",*p);

思考:下面代码能不能正确输出数组元素的值呢?
int a[10];
int * p;
for(p=a;p<a+10;a++)
printf("%d",*a);

答:是不行的。因为数组名a代表的是数组首元素的地址,是一个指针型常量,它的值在程序运行期间是不改变的,即a++是不变的。
因此,结合动态分配数组,我们可以建立一个一维的数组指针:
int (* array)[N]=(int *)malloc(N*sizeof(int));

最新文章

  1. 【LeetCode OJ】Construct Binary Tree from Preorder and Inorder Traversal
  2. ECS挂载数据盘
  3. DEDECMS之九 文章采集
  4. wc(Word Count)
  5. Node.js学习记录
  6. jQuery 预习视频
  7. 待验证的一些IOS问题
  8. json 是什么
  9. VS2015操作Oracle数据需要做那些设置?
  10. Java GUI图形界面开发工具
  11. android如何让service不被杀死-提高进程优先级
  12. Python学习笔记四
  13. JSP页面静态包含和动态包含的区别与联系
  14. [转帖]Stack的三种含义
  15. webpack入门(二)what is webpack
  16. 对pytorch中Tensor的剖析
  17. 读取配置文件的URL,使用httpClient发送Post和Get请求,实现查询快递物流和智能机器人对话
  18. pandas练习(二)------ 数据过滤与排序
  19. linux kernel swap daemon
  20. 【python】正则表达式-正则表达式常见的字符和符号表

热门文章

  1. n年的一次聚会
  2. Windows SID理解
  3. SQLite连接C#笔记
  4. SQL Server获取TEXT字段的内容长度
  5. Task用法(2)-任务等待wait
  6. mysql查询最近30天、7天、每天、昨天、上个月的记录
  7. 微信小程序基础语法总结
  8. mysql权限表
  9. C# 连接Mysql 字符串
  10. mybatis中in查询