解釋一段C程式

2023-01-02 19:06:00 字數 824 閱讀 4724

1樓:我係傑仔

1全部可能定義的時候分開寫會有助於理解:

int a[5]=;

int *p; //定義了乙個指向整型變數的指標,p存放int型別的位址;

int **k //定義了乙個指向指向整型變數的指標的指標(這句話有點拗口,自己慢慢體會一下),指標其實就是像整型一樣的資料型別,它也可以被另乙個指標指向;就是說k是指標的指標,k存放的是p那種int *型別的位址;

第乙個輸出是2不明白是吧?

首先你要明白p++的含義,即p在當前語句中依然以p的初值進行計算,執行完當前這個語句後p才等於p+1;

舉個例子:n = 2; a = 1+n++; 最後a = 3; n = 3;

所以printf("%d",*(p++));可以分開寫成 printf("%d",*(p)); p=p+1; 下面就分三步:

1. 前面有p=a,所以p存放了陣列a第乙個元素的位址,所以*p就是2;

2. 執行完上面那個語句後,p馬上等於p+1,所以這時p又指向了a陣列中第二個元素;

3. 前面有k=&p; *k就等價於p; 所以 *(*k) 就等價於*p了..第二步p指向了a陣列中第二個元素,那*p是多少就不用我說了吧...

2樓:am蘑菇

是2和4。

因為p++,p加1是後加,輸出*p的值後,p才加1因為輸入*p的值後,p+1,所以這時候p就指向第二個值,也就是4所以k的值也就是4,因為k本來是指向p的。

3樓:匿名使用者

**p是指向指標的指標,第乙個printf輸出的似乎陣列a大二個printf輸出的是陣列最後乙個元素

求解釋一段C語言程式的執行結果,程式及結果如圖所示

列印bai出來應該是 個很大的未知du數,因為a x 傳入的zhi引數是daox的位址,p是乙個指標,所以內p x的位址容 而不是20,p指代的是先將p做加的操作 也就是將x的位址做加1操作,然後再取加1後位址裡面的值,而你現在只設定了x的位址上的值為20,而x加1的位址上的值是個未知數,所以答案是...

給我解釋一下這個C語言程式段為什麼執行時候要輸入兩次呢

scanf lf x 不要在scanf中隨意使用 n,他表示忽略一切空白符直至下乙個非空白符出現 scanf lf n x 把換行符去掉就行了,這是緩衝區的問題。scanf 函式的問題 簡單解釋一下,scanf 函式中 n 相當於乙個空格,例如 d n 首先scanf 跳過空格讀取乙個整數,然後跳到...

用C語言詳細解釋一下該程式,C語言跪求解釋該程式每一句的詳細意思?

程式如下 include int max int x,int y void main main函式呼叫 strcpy a,null 該函式內部throw invalid argument s 丟擲乙個專char 型別的異常,於是該函式內部的正常 中斷執行。屬 catch char e argumen...