C语言中的指针和数组
2017-11-20 22:30
148 查看
指针和数组关系密切。不带下标的数组名实际上就是指向数组第一个元素的指针。char p[0],以下两句完全等价:p, &p[0]。换言之,也就是:p == &p[0]为真,因为数组第一元素的地址也就是数组的地址。观察下面程序,p1和p2实际指向同一个内存地址。
在指向某数组元素的指针上加或减去一个整数,就可以指向另一个数组元素,但不能越界,即超出该数组的范围。在指针上进行的加减运算,必须指向同一个数组,或数组存储空间的下一个单元。比如p=a+10是非法的,因为a只有5个元素。而p=a+5,虽然a的元素是a[0]-a[4],但p可以指向数组存储空间的下一个单元。
引用数组元素,既可以用下标的方式,即a[i],也可以用指针的方式,即*(a+i)或*p。
没有下标的数组名称为指针,反之,任何指针变量也可以取下标,就像变量声明成数组一样。例如:
上述3个赋值语句等价,都将100这个值赋到数组第6个元素中。其中第二种是对p进行下标操作,第3句是使用指针运算。
C语言提供访问数组有两种方法:指针运算和数组下标。程序中经常通过指针运算存取数组,原因在于指针运算一般快于数组下标。因为程序设计中常常考虑速度因素,C程序员一般都用指针访问数组元素。
*p++等价于*(p++)。也即先得到p所指向的变量值(*p),再使p=p+1。也就是说,先取得当前p所指向的变量值,再使p指向下一个变量。
#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指向下一个变量。
相关文章推荐
- C语言数组和指针
- C语言02 - 指针运算、数组与指针、指针变量名、指针与函数参数、指针函数、函数指针、二级指针
- C语言day3(字符串,字符数组,一级指针的典型用法)
- C语言 指针与一维数组,指针遍历一维数组的多种方法
- C语言--- 高级指针2(结构体指针,数组作为函数参数)
- C语言 内存分配 地址 指针 数组 参数 实例解析
- C语言中指向一位数组与二维数组的指针
- c语言 指针数组
- C语言中关于字符数组与字符指针的本质区别
- 20170214C语言提升08_指针_01变量及指针及数组
- C语言数组与指针详解
- (转载) C语言技巧:怎样把数组作为参数传递给函数?(值传递和指针传递)
- c语言之指针数组理解三
- 20170215C语言提升08_指针_02数组指针及指针数组及函数指针
- c语言中的数组和指针
- 【c语言】strlen与sizeof对数组和指针的求法
- 【嵌入式开发】C语言 指针数组 多维数组
- C语言之对队列、结构体、指针、数组的理解
- C语言中使用指针实现数组排序
- 老调重谈:C语言中的指针和数组