赞
踩
(1)当定义一个指针数据之后 int *p ,通过*p 获取指针指向的数据。
(2)当指针指向一个数组的时候,int *p , int a[3] , p=a ; 因为数组名就是指向数组第一个数值的地址。如下
- int main()
- {
- int *p=NULL;
- int a[3]={0,1,2};
- p=a;
- printf("a[1] is %d\n",a[1]);
- printf("p[1] is %d\n",p[1]);
- printf("*(p+1) is %d\n",*(p+1));
- printf("*(a+1) is %d\n",*(a+1));
- return 0;
- }
-
-
- /*输出结果
- a[1]=1
- p[1]=1
- *(p+1)=1
- *(a+1)=1
- */
实际上系统在编译时,数组元素 a[i] 就是按 *(a+i) 处理的。即首先通过数组名 a 找到数组的首地址,然后首地址再加上i就是元素 a[i] 的地址,然后通过该地址找到该单元中的内容。
所以 a[i] 写成 *(a+i) 的形式,程序的执行效率会更高、速度会更快。因为在执行程序的时候数组是先计算地址,然后转化成指针。而直接写成指针 *(a+i) 的形式就省去了这些重复计算地址的步骤。
(3)当指针指向一个地址的时候,可以通过p[1]这种下标来访问地址存放的数值。
- #include<stdio.h>
- int main()
- {
- int *p=NULL;
- p=malloc(80);
- p[0]=1;
- p[1]=2;
- *(p+1)=3;
- printf("p[0]= %d \n",p[0]);
- printf("p[1]= %d",p[1]);
- free(p);
- }
-
- /*
- p[0]=1;
- p[1]=3;
- */
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。