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