先上一段代码给大家看下
#include<stdio.h>
int main(){
int a[100];
int n,i;
scanf("%d",&n);//输入个数
for(i=0;i<n;i++)scanf("%d",&a[i]);//这里也可以用 scanf("%d",a+i);
for(i=n-1;i>0;i--)printf("%d ",a[i]);
printf("%d\n",a[i]);
}
然后我解释一下:
scanf传得必须是指针,也就是地址。
比如int a;就需要&a;但是如果是数组,数组本身表示的是数组首元素的地址。也就是int a[10]里a就表示a[0]的地址;那a[3]的地址呢?可以这样,&a[3];这就是加&的数组,如果不加呢,可以这样(a+3)就可以了,a是a[0]的地址,那么a+3就是a[3]的地址。
所以数组的scanf赋值是要加&的。
但是printf里因为输出的不是地址而是值所以不用加&。
为了更好的对对地址进行操作的函数的理解,我们再拿二维数组解释一下。
我有一个二维数组st_edge** edge
我想让当指针位置指向的不是每一行(维)的最后一个null节点时,让指针在这个一维数组中往后移动,直到移动到这一行的最后一个非null节点的下一个位置,那么我可以
while(*edge != NULL){
edge = &((*edge)->next);
}
上面的意思即为当一维指针不指向null时,将指向二维数组的指针指向一维指针(*edge)下一个地址的地址,即二维指针的地址,从而实现了二维指针的移动。