Posted on 2007-06-28 20:24
谢龙飞 阅读(155)
评论(0) 编辑 收藏 引用
指针和数组看了很久没明白过来啊
尤其是什么多维数组的指针
先来点简单的 笔记吧
int *p( ) :定义一个返回值为指针的函数
int (*p)[n]:定义一个指向有n个元素的一维数组的指针 注意:p+1指向下一个含n个元素的一维数组
int (*p)( ):定义一个函数指针
int *p[n]:定义一个指针数组
int **p:定义一个指向int *类型指针的指针p
对于指针数组:
如定义一个指针数组如下
int *p[2];
int a[3]={1,2,3};
int b[3]={4,5,6};
p[0]=a;
p[1]=b;
此时p[0]相当于一个指针变量
对一个指针变量a 有a[n]=*(a+n) 如:*a=a[0] *(a+1)=a[1] .................
则有p[0][0]=*(p[0]+0)=1
p[0][1]=*(p[0]+1)=2
p[0][2]=*(p[0]+2)=3
在多维数组中也要注意运用 a[n]=*(a+n)式子进行与如上相似的变换
如:a[i][j]=*(*(a+i)+j)
上式也是根据a[n]=*(a+n)变换而来的
首先a[i]=*(a+i)
再来一次类似变换 就有a[i][j]=*(*(a+i)+j)
另注意:对二维数组:int a[i][j]
a代表的是数组的首地址 即:第0行 a[0][0]的地址
而a+1代表的不是a[0][1]的地址 而是代表第1行的a[1][0]的地址
a[1]是一个地址即:a[1][0]的地址 因此a[1]+1就是a[1][1]的地址 *(a[1]+1)=a[1][1]