2025年3月31日 星期一 乙巳(蛇)年 正月初一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言数组指针(指向数组的指针)图文讲解

时间:10-08来源:作者:点击数:62

C语言代码清单 1:显示数组元素的地址(指向元素的指针)

  • #include <stdio.h>
  • #include <stdlib.h>
  • int main( )
  • {
  • system("color 70");
  • int i;
  • int a[5]={1,2,3,4,5};
  • int *p = a; //指针p指向a[0]
  • printf("指向各元素的指针的表达式及值:\n");
  • printf(" a = %p p = %p\n",a,p);
  • for(i=0;i<5;i++)
  • {
  • printf(" &a[%d] = %p a+%d = %p ",i,&a[i],i,a+i);
  • printf("&p[%d] = %p p+%d = %p\n",i,&p[i],i,p+i);
  • }
  • printf("\n各元素的表达式及值:\n");
  • printf(" *a = %d *p = %d\n",*a,*p);
  • for(i=0;i<5;i++)
  • {
  • printf(" a[%d] = %d *(a+%d) = %d ",i,a[i],i,*(a+i));
  • printf("p[%d] = %d *(p+%d) = %d\n",i,p[i],i,*(p+i));
  • }
  • printf("\n\n");
  • system("pause");
  • return 0;
  • }

运行结果为:

指向各元素的指针的表达式及值:
     a = 0060FEE4    p = 0060FEE4
&a[0] = 0060FEE4  a+0 = 0060FEE4  &p[0] = 0060FEE4  p+0 = 0060FEE4
&a[1] = 0060FEE8  a+1 = 0060FEE8  &p[1] = 0060FEE8  p+1 = 0060FEE8
&a[2] = 0060FEEC  a+2 = 0060FEEC  &p[2] = 0060FEEC  p+2 = 0060FEEC
&a[3] = 0060FEF0  a+3 = 0060FEF0  &p[3] = 0060FEF0  p+3 = 0060FEF0
&a[4] = 0060FEF4  a+4 = 0060FEF4  &p[4] = 0060FEF4  p+4 = 0060FEF4

各元素的表达式及值:
   *a = 1  *p = 1
a[0] = 1  *(a+0) = 1  p[0] = 1  *(p+0) = 1
a[1] = 2  *(a+1) = 2  p[1] = 2  *(p+1) = 2
a[2] = 3  *(a+2) = 3  p[2] = 3  *(p+2) = 3
a[3] = 4  *(a+3) = 4  p[3] = 4  *(p+3) = 4
a[4] = 5  *(a+4) = 5  p[4] = 5  *(p+4) = 5

在代码清单 1 的程序中,我们用printf("a=%p p=%p\n",a,p);显示指针 p 和数组名 a 的值后发现两者的显示结果都是 0060FEE4(数组元素 a[0] 的内存地址)。之所以会有这样的结果,是因为 C语言中的数组名实际上就是一个指针,而且它指向该数组的第一个元素(见图 1a) ),即代表数组名的变量 a 里面存放的是第一个数组元素的内存地址。

如果定义一个指针 p,并将其指向数组 a,即int*p=a;,则这个指针 p 的行为就像数组 a 本身一样(见图 1b) ),即在访问数组 a 的过程中,所有的数组名 a 都可以用 p 代替:a[i]、*(a+i)、p[i]、*(p+i) 这 4 个表达式都表示相同的第 i 个数组元素。

指针 p 和 a 都指向数组的第一个元素 a[0],则:p+1 和 a+1指向数组元素 a[1];p+2 和 a+2 指向数组元素 a[2];依次类推,p+i 和 a+i 都指向数组元素 a[i]。

数组名及指向数组的指针
图 1:数组名及指向数组的指针

指针变量 p 和 a 中都存放的是数组第一个元素 a[0] 的地址 &a[0],则:p+1 和 a+1 中都存放的是数组元素 a[1] 的地址 &a[1];p+2 和 a+2 中都存放的是数组元素 a[2] 的地址 &a[2];依次类推,p+i 和 a+i 中都存放的是数组元素 a[i] 的地址 &a[i]。
.
由此可知:&a[i]、a+i、&p[i]、p+i 这 4 个表达式的值都是数组元素 a[i] 在内存中的地址 &a[i]。

总结:数组名就是一个指针,而且它指向该数组的第一个元素。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门