#include <stdio.h> #include <stdlib.h> int main() { int *p[3];//p不是变量,元素才是变量,即p[i],这是指向int的一个一维指针数组 int (*q)[3];//q是变量指针,可以指向某个数组,是数组指针 int d[3]={1,2,3}; for(i=0;i<3;i++) p[i]=(int *)malloc(sizeof(int)); //only when we malloc for p,we can use p; *p[0]=d[0]; *p[1]=d[1]; *p[2]=d[2]; printf("*p[0]=%d,*p[1]=%d,*p[2]=%d\n",*p[0],*p[1],*p[2]); q=d; printf("(*q)=%d,q[0][1]=%d\n",(*q)[1],q[0][1]); //从结果可以看出这两个效果是一样的,可以引出数组和指针的关系 return 0; } 指针指向数组时候便是指向了数组的第一个数的地址,这样指针下的地址就可以直接用数组第一个数的地址来代替。 比如:定义int a[10]; int *p; 则p=a;等价于p=&a[0]; 上述两种表示方法都指向了数组a。这也就相当于p[0]=a[0]。这里p[0](也可以表示为*(p+0))就直接代表了*p,如果p之前未被改动过的话。 运行结果: |
|
来自: champion_xu > 《指针》