void f(int *p, int a[]){p=a;}
void main()
{
int a[]={1,3,5,7};
int *p=&a[1];
f(p,a);
p++;
printf("%d",*(p));
}
嚴格說起來,C只提供call by value,
因為指標就是整數變數,
16位元的指標是16位元的整數變數,
32位元的指標是32位元的整數變數,
64位元的指標是64位元的整數變數,
傳指標只是傳一個整數過去而已,嚴格說起來,也只是call by value。
因為指標就是整數變數,
16位元的指標是16位元的整數變數,
32位元的指標是32位元的整數變數,
64位元的指標是64位元的整數變數,
傳指標只是傳一個整數過去而已,嚴格說起來,也只是call by value。
所以把p傳到f(int *p, int a[])中,只是把一個位址(value)傳到f()裡,f()裡是把p的值指向a,
但無論如何,回到main()時,main()中p這個指標變數(無正負號整數變數)就變回原來main()中&a[1]的位址,也就所以,p++後,p就指向&a[2]的位置。
以上只是我個人的一種想法而已,不代表教科書立場。
ANS:5
沒有留言:
張貼留言