指针是把一个变量的地址放入指针变量中进行操控,那么,在我们使用数组作为变量时应该如何使用?
我们可以将数组的首地址放入指针中,例:
int a[80];
int *q1;
q1=&a[0];
而在我们需要调用的时候,可以直接如同调用数组一样,例:
*(q1+0)=1; //+0就相当于a[0],+1就相当于a[1],以此类推
当然也可以用变量代替0,写作一个循环
for(i=0;i<80;i++)
printf("%d",(q1+i));
大家都知道,在指针中保存的是地址,那么*(q1+0)与*(q1+1)的地址在理想状态下相差是多少?相差的并不是1,而是int的字节数,举个例子:
一般认为char是1个字节,那么一个字符数组:
假设a的地址是0000,b的地址就是0001
而一般认为一个int是四个字节,那么在一个int数组中,
假设1的地址是0000,那么2的地址就变成了0004
而二维数组就是将一维数组看成一个单元,以另一个数组来存放这个单元,例如:
int a[80][80];
int *q1[80];
int **q2
q1=&a[0];
q2=&q1;
q1存放了数组一行的地址,而q2存放了q1的地址
调用时使用*((*q2+i)+j)来表示数组的i行j列
虽然也可以使用
int a[80][80];
int (*q2)[4];
q1=&a[0];
q2=&q1;
来表示,但我通常不会这样写,感觉乱,不过这种写法却是会更加简便