C語言 兩道選擇8指標所指的地址是什麼地址 9費解為什不是輸出指標所指的東東。請詳細解釋這兩道

2021-03-24 02:17:34 字數 991 閱讀 9279

1樓:匿名使用者

① **如下:

int fun(char *s)

這個函式

模擬的就是strlen()的行為。 s是一個字串(而且應該是'\0'結尾的),假設為"abc\0"; 字串的長度是3,但字串陣列的個數是4 -- 這是理解問題的關鍵,-- 而且字串中每個字元的記憶體地址都是{連續的}。

char *t = s;  ==> 定義了一個字元指標t,指向s,也即s中字元『a』的地址;

while (*t++); 注意這個while迴圈,其實什麼都沒有作,只是在檢測t指標所指向的字元是否為0,也即'\0'. c語言裡面++的優先順序=指標*,而且是t++,不是++t,所以t先*t(取值,即字串中'a'),然後t再++,指向下一個字元'b'; while('a'),顯然條件滿足,所以t++, while('b')也滿足,。。。,直到while('\0'),這時的t指向的「abc\0」中的最後一個地址;而s則是指向'a', t-a,雖然這時t和a都是地址,但前面說了地址是連續的,而且char只佔用1個自己,因此t-s = 4,但注意這個4包含了結尾的'\0',因此為得到字串長度,應該再把它減去,所以返回t-s-1.

②  這個簡單:

double *p, a;

p是指標,而a是普通變數; 因此a) b)都錯了, 因為指標定義的時候 double *p;而使用的時候*p是取指標所指向地址的值,所以p = &a合法,而*p = &a非法(&a是對普通變數a取地址);scanf()要求格式是的「地址」, 即指標變數,因此scanf(..., &a)合法, scanf(...,p)也合法,但scanf(...

, *p)則非法, 因為這時是使用p,而非定義p, 因此c)是錯誤的,只有d)是正確的。--- 這個的考點是:指標的定義和具體使用。

2樓:青春無情

8*指標s指向的是字元的開始位置,通過while後t 指標指向字串最後字元也就是結束符,所以返回的值就是他的長度,9*輸入必須為一個變數的地址而p儲存的就是a地址

兩道c語言題目,兩道C語言題目

1.for先執行第一個賦值語句,因為第一個賦值語句為空,不理,之後就判斷 10 5,進入迴圈i 再執行第三個賦值語句 b 6,之後再開始判斷,再i 再 b如此迴圈 當10 10時跳出迴圈,此時i 5 2.while 1 x 2 這個是死迴圈這樣的表示式為邏輯判斷,一步步的做出返回 先 1 x 返回0...

兩道c語言題目求解

第一題可能是題目印錯了,如果的確是你所寫的那樣 答案是16,6 define f x x x main 這樣答案就是c,第二道題,題目可以這樣看 main cnum 2 cnum 0 x 2 cnum 0 y 4 cnum 1 x 3 cnum 1 y 1 printf d n cnum 0 y c...

求c語言大神,秒了這兩道題,求C語言大神給解答一下。。。兩道題

include void main void printf 原資料為 n for i 0 i 20 i printf d a i printf n while 1 else break printf 輸入數值 scanf d num for i 20 i n i a i a i 1 後移 a n n...