修改C中函数内的数组

Che*_*hew 9 c arrays pointers function

// test.txt
50
13
124
Run Code Online (Sandbox Code Playgroud)

-

void hi ( int *b, FILE *pfile ) {

    rewind ( pfile );
    int i;
    for( i = 0 ; i < 3 ; i++ ) {
         fscanf ( pfile, "%d", &b[i] );
    }
}

int main ( void ) {

    FILE *fp = fopen ( "test.txt", "r" );
    int a[10];  //putting extra size for test.

    hi ( &a[0], fp );   
    printf("%d,%d,%d\n", a[0], a[1], a[2]);

    fclose ( fp );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当涉及到数组时,我正在尝试理解指针.虽然我在测试上面的代码,我注意到,通过将不同的索引值,如hi ( &a[0], fp )hi ( &a[1], fp )我得到不同的结果.

//result of [ hi ( &a[0], fp ) ] //result of [ hi ( &a[1], fp ) ] 50,13,124 junk#,50,13 .

我对结果感到很困惑,因为在'hi'函数中我指定了数组的开头,从中i = 0意味着它存储从中开始的值a[0].但似乎放弃1而不0是以某种方式将值放在一边.为什么会这样?

Cod*_*ice 6

如果您将此&视为对单个项目起作用的运算符,这可能对您更有意义,就像-更改符号的数字上的行为一样.在这种情况下,&取你给它的任何地址.在这种情况下&a[0],你正在采取的地址a[0].在这种情况下&a[1],你采取的地址a[1].换句话说,您获取数组的不同元素的地址.所以在函数中,b包含传递给它的地址.就函数所知,传入的是数组的"第一"元素.它不知道任何前面的元素.