// test.txt
50
13
124
-
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;
}
我正在尝试理解指针和数组的关系。在测试上述代码时,我注意到当将不同的索引值(例如将&a[0]
改为&a[1]
)传递给函数hi(&a[0], fp)
和hi(&a[1], fp)
时,会得到不同的结果。
// [ hi ( &a[0], fp ) ] 的结果 // [ hi ( &a[1], fp ) ] 的结果
50,13,124 junk#,50,13 .
对于这个结果,我感到非常困惑,因为在函数hi
中,我明确指定了从i = 0
开始存储数组的值,这应该意味着它从a[0]
开始存储。但是似乎用1
代替0
会把值向一边移动。为什么会发生这种情况呢?
&b[i]
就是b + i
。如果你传入&a[0]
(对于指针来说与a
相同),那么它就变成了a + i
。如果你传入&a[1]
,也就是a + 1
,那么它就变成了a + 1 + i
。 - Ry-