Chinaunix首页 | 论坛 | 博客
  • 博客访问: 345576
  • 博文数量: 208
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 286
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-20 11:39
文章分类

全部博文(208)

文章存档

2014年(208)

我的朋友

分类: C/C++

2014-06-15 18:51:22

二维数组与数组指针的用法
    严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。既然指针变量的值是一个地址,那么这个地址不仅可以是变量的地址,也可以是其它数据结构的地址,包括一个数组或一个函数的首地址。
       一个数组,若其元素均为指针类型数据,称为指针数组。也就是说,指针数组中每一个元素都相当于一个指针变量。一维指针数组的定义形式为:类型名 *数组名[数组长度]。例如:int *p[4] ;由于[]比*优先级更高,因此p先与[4]结合,形成p[4]的形式,这显然是数组形式。然后再与p前面的*结合,*表示此数组是指针类型的,每个数组元素都指向一个整型变量。 数组指针是指向数组的一个指针,如 int (*p)[4],表示一个指向4个元素的数组的指针。
看下面的例子:
#include
using namespace std;
int main()
{
   int v[2][10]={{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20}};
   int (*a)[10]=v;
   cout<
运行结果如下:
80
4
1
0012FEF8
0012FEF8
0012FEF8
11
11
2
2
 通过上面的例子,我们总结二维数组和数组指针的用法如下:
一维数组a,如int a[5],a相当于一个指针常量(指向内容不能变),类型为int [5] (等价于指针中的类型int *),指向这个数组的首个元素,a的值为&a[0]。
二维数组b,如int b[2][5],b相当于一个指针常量,类型为int [2] [5] (等价于指针中的类型int (*)[5]),指向这个数组的首行元素,a的值为&b[0][0]。具体用法如下:① b+1表示一个新指针,其指向的位置相对于b向后移动了1*sizeof(数组每行),即指向数组的第二行元素。其值为&b[1][0]。注意,这里不能用                   b++,因为b的值不能改变。
 ②*b也相当于一个指针,指向b所指向的那行元素的首个元素,类型为int [5],*b的值也为&b[0][0]。
 ③b[0]用法同*b,表示指向b中首行元素的首个元素的指针,类型也为int [5],b[0] 的值同样是&b[0][0],b[1]对应于*(b+1)。
 ④b[i]+j, *(b+i)+j 就表示了指向二维数组b中位置为(i ,j)的元素的指针。
 ⑤虽然b,*b,b[0]的值相同,但由于其指向类型不同(或者说自身类型不同),用法就不一样。
 ⑥如果定义一个数组指针,如int (*p) [5]=b,上述b的用法都适用于p。

阅读(762) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~