scanf奇怪的用法

学习图的时候发现了一条很奇怪的代码: scanf(&G->vexs[i])

整个代码是:


```c
void CreateMGraph(MGraph*G)
{
    int i,j,k,w;
    printf("Input the numVertexes and the numEdges:\n"); 
    scanf("%d %d",&G->numVertexes,&G->numEdges);
    for(i=0;i<G->numVertexes;i++)
    scanf(&G->vexs[i]);//就是这一句
    for(i=0;i<G->numVertexes;i++)
        for(j=0;j<G->numEdges;j++)
            G->arc[i][j]=INFINITY;
    for(k=0;k<G->numEdges;k++)
    {
        printf("输入边(i,j)的下标i,j和权数:");
        scanf("%d %d %d",&i,&j,&w);
        G->arc[i][j]=w;
        G->arc[j][i]=G->arc[i][j];
    }
}

```

scanf(&G->vexs[i]);//就是这一句
应该是赋0了

img

#include<stdio.h>

int main()
{
    int n;
    scanf(&n);
    printf("n=%d",n);
    return 0;
}

格式说明由“%”和格式字符组成,如%d%f等。它的作用是将输出的数据转换为指定的格式输出。
但是像这种scanf(&G->vexs[i]); 我们常规来说,不使用这种方式,像这里这样使用我感觉不合理。
你如果是在C++中cin>>G->vexs[i];是可以的,但是在C中,scanf(&G->vexs[i]);,尽量还是要符合格式控制输入的格式。
希望对题主有所帮助,可以的话还请点下采纳!