|
|
发表于 2013-6-9 12:54:47
|
显示全部楼层
首先看声明:- int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
复制代码 int *num[5]这是什么你得理解,num[5]说明num是个数组, int* 说明这个数组元素的类型是整型的指针。
int *num[5]这个声明表示:num是一个含有5个元素的数组,并且这5个元素都是整型指针类型。
为了理解方便,我们先假设数组元素类型是int而不是int *,那么我们知道
int num[5] = {1,3,5,7,9};
int *p;
p = num;
for(i=0;i<5;i++){
printf("%d ",**p);
p++;
}
里面每次经过p++运算后得到的p就是数组num中的下一个元素的地址。同样- int a[5]={1,3,5,7,9};
- int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
- int **p,i;
- p=num;
- for(i=0;i<5;i++){
- printf("%d ",**p);
- p++;
- }
复制代码 这里每次经过p++运算后得到的p也是数组num中的下一个元素的地址,用运算*p我们可以得到相对应的一个数组元素。但是这个数组元素有点特别,他们都整型指针。所以我们还需对它解一次引用即*(*p);
总的来说:你这个程序里面用表达式*p得到的是&a[0],&a[1],&a[2],&a[3],&a[4]中的一个,
用表达式**p的是*&a[0],*&a[1],*&a[2],*&a[3],*&a[4],也就是a[0],a[1],a[2],a[3],a[4] |
|