[C]c语言中,scanf里面要是数组要不要加&?

先上一段代码给大家看下

#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)下一个地址的地址,即二维指针的地址,从而实现了二维指针的移动。

  • 55
    点赞
  • 142
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值