设为首页 加入收藏

TOP

2.9.3 数组与指针
2013-10-12 07:00:45 来源: 作者: 【 】 浏览:132
Tags:2.9.3 指针

2.9.3 数组与指针

前面我们已经知道,通过数组下标可以确定数组元素在数组中的顺序和存储地址。由于每个数组元素相当于一个变量,因此指针变量可以指向数组中的元素,也就是说可以用指针方式访问数组中的元素。

对一个指向数组元素的指针变量的定义和赋值方法,与指针变量相同。例如:

  1. int a[10]; /*定义a 为包含10个整型数据的数组*/  
  2. int *p; /*定义p 为指向整型变量的指针*/  
  3. p=&a[0]; /*把a[0]元素的地址赋给指针变量p*/ 

C语言规定,数组名代表数组的首地址,也就是第0号元素的地址。因此:

  1. p=a; /*等价于p=&a[0]; */  
  2. int *p=a; /*等价于int *p=&a[0]; */ 

对于指向首地址的指针p,p+i(或a+i)就是数组元素a[i]的地址,*(p+i)(或*(a+i))就是a[i]的值。如果指针变量p 已指向数组中的某一个元素,则p+1 指向同一数组中的下一个元素。

引入指针变量后,就可以用以下两种方法来访问数组元素:

(1)下标法,即用a[i]形式访问数组元素,在前面介绍数组时都是采用这种方法。

(2)指针法,即采用*(a+i)或*(p+i)形式,用间接访问的方法来访问数组元素,其中a 是数组名,p是指向数组的指针变量,其初值p=a。具体实现过程如程序2.24中的代码。

【程序 2.24】定义一个数组,并用指针法访问数组的元素:test24.c。

  1. #include <stdio.h> 
  2. main()  
  3. {  
  4. int i;  
  5. int a[5]={0,1,2,3,4}; /*声明一个数组并对其进行初始化*/  
  6. int *p=a; /*把数组的首地址赋给指针变量p*/  
  7. for(i=0; i<5; i++)  
  8. printf("a[%d]=%d\n",i,*(a+i)); /*通过数组名计算元素的地址,找出元素的值*/  
  9. for(i=0; i<5; i++)  
  10. printf("a[%d]=%d\n",i,*(p+i)); /*用指针变量指向元素*/  

程序运行结果如下:

  1. a[0]=0  
  2. a[1]=1  
  3. a[2]=2  
  4. a[3]=3  
  5. a[4]=4  
  6. a[0]=0  
  7. a[1]=1  
  8. a[2]=2  
  9. a[3]=3  
  10. a[4]=4 


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.10.2 结构体数组 下一篇2.9.1 地址和指针

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: