C語言的一道程式題看不懂為什麼!!求解釋詳細,謝謝

2021-05-23 11:10:04 字數 1289 閱讀 3054

1樓:我是比丘猴

int a=2;

int f(int *a)

void main()

s+=f(&a); //s是外部定義的所以還存在,此時再執行f(),返回外部定義的a的值,即2

//所以s=s+2=5+2=7,但注意a此時還有效,所以指標的值自加一後,a變成3

printf("%d %d\n",a,s); //因此輸出是3 7}

2樓:bei極星願

int f(int *a)

這個函式,你傳進去多少,傳出來還是多少。return (*a)++ 就是先返回a的值,在自增1

void main()

//--!>

s+=f(&a); //到這裡的a是全域性變數。。相當於s=s+2 變成7了,全域性a自增一,變成3了。

printf("%d %d\n",a,s);}

3樓:召走刀文

這個主要涉及到變數作用域的問題,兩個原則

區域性變數與全域性變數重名時,遮蔽全域性變數

{}裡宣告的區域性變數的作用域就是{}的範圍。本質上跟函式的{}是一個道理

**中,會遮蔽掉外面的全域性變數a,此時函式f的引數是5,所以計算後s 為5。

之後的s+=f(&a);中,a是全域性變數a(因為int a=5的作用範圍是那個{}),所以s為7

在printf中的a是全域性變數的a,因為經過上面f函式的計算,所以a為3

4樓:匿名使用者

其實這裡考查的是自增運算 a++ 與 ++a 的運算執**況以及變數a的作用域。

int a=2;

int f(int *a)

void main()

s+=f(&a); //全域性變數a的作用域生效,所以這裡傳遞的a是2,所以s+=2使得s=7,a自增變為3

printf("%d %d\n",a,s);}

5樓:匿名使用者

執行完之後s=5;這個沒問題,在{}中的a在{}外已經不在有作用於,所以a為全域性變數的a=2;執行

s+=f(&a)時可認為是s=s+(a++);所以s=7;a=3

6樓:王海洺

int a =5是他外圍的那個小的大括號範圍內的作用,s = s+a = 5 ,return了一個(*a)++,將指標往前推了一步,a的值變成了6, 然後在外圍時候a=6失效,因為有全域性定義a =2 ,s = s+a = 7,return了一個(*a)++,將指標再往前推了一步,a的值變成了3.

C語言的程式,有一段看不懂,C語言的一個程式,有一段看不懂

p是一個字元型的指標,因此,p表示指標當前位置的字元。由於c中對字元型和整型是不進行區分的 即可以互相轉換的 因此 p也可以認為是一個數字。同樣 0 也可以代表一個數字。根據ascii 表可以知道。字元 0 是十進位制的48,所示也可以認為 0 就是數字48。因此,上面 的 p 0 的意思就是把字元...

c語言題目,看不懂啊!求解釋,C語言 25題 完全看不懂啊

我也不懂。你這段 到底有什麼意義。找到最大的字元。然後把它賦值成結束符。到底有神馬特殊作用。最後輸出個mo。有什麼意思 這個程式很簡單啊!程式不難,那就一步一步來,把它搞懂首先程式是從main 函式開始執行,第一步 字串賦值 定義了字元陣列a用來儲存字串 morning 第二步定義整形初值i,j 第...

看c語言的程式單句看都懂,整體看不懂有什麼辦法解決嗎

你要知道,看別人寫的 是一件很痛苦的事情 特別是那種沒有註釋,變數名亂取a,b,c的 不僅是你,就算是經驗豐富的程式設計師也是一樣。第二,解決一個問題每個人用的方法不同,所以 也不一樣。也許你看完題目後自己已經大概知道怎麼去實現了,但是看別人 的時候人別不是用你那種方法,所以很難看懂。這很正常。第三...