本來是在複習軟考的時候,準備擴充一下,把數組名和指標徹底分清楚
結果自己寫的代碼的行為把自己徹底搞暈了...
Code:
- #include "stdio.h"
- int fun1(int *a)
- {
-
- int* p=(int *)(&a+1);
- printf("%d/n",*a);
- printf("%d/n",a);
- printf("%d/n",&a);
- printf("%d/n",&a+1);
- printf("%d/n",p[-1]);
- return 0;
- }
- int fun2(int **a)
- {
- int* p=(int *)(a+1);
- printf("%d/n",**a);
- printf("%d/n",*a);
- printf("%d/n",a);
- printf("%d/n",a+1);
- printf("%d/n",p[-1]);
- return 0;
- }
- int fun3(int *a)
- {
-
- int* p=(int *)(((int(*)[5] )(a))+1);
- printf("%d/n",*a);
- printf("%d/n",a);
- printf("%d/n",&a);
- printf("%d/n",&a+1);
- printf("%d/n",p[-1]);
- return 0;
- }
-
- int main()
- {
- int a[5]={1,2,3,4,5};
- int * p=(int*)(&a+1);
- printf("%d/n",*a);
- printf("%d/n",a);
- printf("%d/n",&a);
- printf("%d/n",&a+1);
- printf("%d/n",p[-1]);
- fun1(a);
- fun3(a);
- fun3(a);
- fun2(&a);
- return 0;
- }
-
兩個fun3(a)的輸出不同...
而且fun2根本不應該最後一個輸出為5
而且要是函數按這樣順序執行
fun1(a);
fun2(&a);
fun3(a);
fun3就不工作!!! 汗...已經想不清楚了...大家幫幫忙