C语言中的指针和数组
来源:互联网 发布:卡盟顶部源码 编辑:程序博客网 时间:2024/05/17 02:10
指针和数组关系密切。不带下标的数组名实际上就是指向数组第一个元素的指针。char p[0],以下两句完全等价:p, &p[0]。换言之,也就是:p == &p[0]为真,因为数组第一元素的地址也就是数组的地址。观察下面程序,p1和p2实际指向同一个内存地址。
#include <stdio.h>int main(int argc, char *argv[]){int a[]={1,3,5,7,9};int *p1=a;int *p2=&a[0];printf("*p1: %u\n",p1);printf("*p2: %u\n",p2);return 0;}
在指向某数组元素的指针上加或减去一个整数,就可以指向另一个数组元素,但不能越界,即超出该数组的范围。在指针上进行的加减运算,必须指向同一个数组,或数组存储空间的下一个单元。比如p=a+10是非法的,因为a只有5个元素。而p=a+5,虽然a的元素是a[0]-a[4],但p可以指向数组存储空间的下一个单元。
引用数组元素,既可以用下标的方式,即a[i],也可以用指针的方式,即*(a+i)或*p。
没有下标的数组名称为指针,反之,任何指针变量也可以取下标,就像变量声明成数组一样。例如:
int *p, i[10];p=i;i[5]=100; //用数组名加下标赋值p[5]=100; //用指针加下标赋值*(p+5)=100; //用指针运算赋值
上述3个赋值语句等价,都将100这个值赋到数组第6个元素中。其中第二种是对p进行下标操作,第3句是使用指针运算。
C语言提供访问数组有两种方法:指针运算和数组下标。程序中经常通过指针运算存取数组,原因在于指针运算一般快于数组下标。因为程序设计中常常考虑速度因素,C程序员一般都用指针访问数组元素。
//以不同的方式输出数组的所有元素的值#include <stdio.h>int main(int argc, char *argv[]){int a[10],i,*p=NULL;for(i=0;i<10;i++)a[i]=i;//第一种:引用数组下标for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");//第二种:借助数组首元素构造的指针for(i=0;i<10;i++)printf("%d ",*(a+i);printf("\n");//第三种:指针for(p=a;p<a+10;)printf("%d ",*p++);printf("\n");return 0;}
*p++等价于*(p++)。也即先得到p所指向的变量值(*p),再使p=p+1。也就是说,先取得当前p所指向的变量值,再使p指向下一个变量。
阅读全文
0 0
- c语言中的数组和指针
- c语言中的数组和指针
- c语言中的指针和数组
- 再论C语言中的指针和数组
- 小议C语言中的数组和指针
- C语言中的指针和数组
- C语言中的指针数组和数组指针
- C语言中的指针数组和数组指针
- C语言中的指针数组和数组指针
- C 语言中的数组类型和数组指针类型.
- C语言中的数组指针
- C语言中的指针数组
- c语言中的指针数组
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- VS环境下Qt工程.UI文件不生成头文件的问题
- MySQL基础知识(全)
- 1701H2 11.20 王建瑜 连续第一天
- java鬼混笔记:springboot之thymeleaf 4:常见的格式化方法
- tp 框架的验证码
- C语言中的指针和数组
- CSS否定伪类
- springCloud+springboot东成西就
- hdu 2112 HDU Today
- Resolume Arena 6(VJ音视频软件) v6.0.0.60521中文版下载
- 从零开始的数据仓库学习生活
- Simulink视频和图像处理模块介绍
- Android依赖库版本不一致
- 装系统