C語言程式問題,求詳細解釋,謝謝

2021-03-10 16:43:16 字數 4909 閱讀 5532

1樓:鴻子

因為prt函式的引數是復&c(c的地制址), &c就是prt函式bai的區域性du變數,它的zhi值在prt函式裡改變,main函式中不會改變。daoc的值是20是因為++的特性,語句結束之後再加1.

把*(z++),換成z++,直接檢視z的位址變化,就很容易理解了。把**發給你,你自己實驗下。

2樓:自由的風的我

函式內執行完z++後,是z的位址變了,而不是z指向的值即c的值變了,當返回到主函式後,z對應的一段儲存空間就被系統收回了,再一次呼叫函式後,是乙個新的指標z指向了c,從而z的值不改變

3樓:匿名使用者

#include

void prt(int *x ,int *y, int *z)main()

這樣就變了,bai原因是:du

你用的傳址,++*x 將該位址實際資料改變zhi了 *x=*x+1,而dao *(z++) 只是改變位址增加,回數值並不變,你

答兩次呼叫都是c的位址,一樣

4樓:我行我素的兔子

prt函式沒有返回值,而主程式中a、b、c的值是不變的,呼叫prt函式多少遍結果都是一樣的。

5樓:時空魔法

x y z是區域性指標 修改這三個值儲存的位址 不會影響 abc的儲存的位址

c語言,程式問題,求大神解釋。謝謝

6樓:風華憐馨

i++;可以寫在switc語句裡面,但是如果寫在switc語句裡面,就要在每乙個case、default中都加上i++;

你可以用很簡潔的方式解決問題,也可以用很繁瑣的方式解決問題,就是這個區別。

7樓:匿名使用者

什麼意思du?當然可以啊,上面的zhi**等價於:daowhile(sym!='#')

回if(flag==0)

。。。。。

8樓:陽頂天鹿鼎記

i用來標識執行的動作是第幾次,而i定義的位置是在while外面,所以i的作用域是整內個main函式,而i++,是執容行一次運算,i就加1,表示又執行了一次運算,而後面需要對i進行輸出,所以i++的操作在while迴圈內,在輸出前都是可以的,所以放在switch語句中也一樣,但是要每個case都要加上這個語句,比較麻煩。

另外,你定義i的時候,要初始化為0,否則它裡面存的值是隨機的,這樣進行++後輸出的值也不正確。

希望對你幫助,如果還有疑問,請繼續提問。

9樓:一棵大樹

看似這個程式bai是用來計算乙個

du整數裡面有幾個zhi2

int main()

int countdigit(int number,int digit)

while(number!=0); //判斷語句,如果number不等於0,重複執行do語句

return s; //返回s的值。}

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

10樓:召走刀文

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

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

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

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

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

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

11樓:周潔倫之謎

注意3點:全域性變數和區域性變數(區域性變數優先順序高),傳位址和傳引數,++操作

int f(int *a) //傳位址,會改變傳入的引數比如 int c = 2; int d = f(&c); 結果d=2,c=3

所以:int s=0;

s+=f(&a); s=7,a=3;這裡是全域性aprintf("%d %d\n",a,s);

12樓:w休息的風

首先你定義了乙個全域性變數int a=2;

然後函式f(int *a)目的是把你傳遞過來的實引數加1.注意:return (*a)++;這句是先執行返回,先把指標a指向的值返回,然後再把該指向的物件進行加1操作。

主函式裡面是這樣執行的,

定義了乙個s,後面有個括號,裡面又定義了個區域性變數a,初始化為5;然後你呼叫函式f,執行完以後,s的值變成5,而臨時變數a的值變成了6,繼續執行,臨時變數的a被釋放了。後面又呼叫了函式f,但是這個變數a是你定義的全域性變數,值為2,呼叫完以後,s的值就變成了7,而a的值加1變成了3.所以最後輸出值為:

3 7.

明白了嗎?

注意兩點:1是函式f返回值那,是先返回後,再把指向的物件加1,2、就是主函式裡面的區域性變數a,和全域性變數a的區別和使用。

13樓:匿名使用者

#include

#include

int a = 2;

int f(int *a)

void main()

中起作用

內起作用。建議寫程式不要寫成與全域性變數同名。

s+=f(&a); //在這個{}內,s = s + f(&a)= 0 + 5 = 5

//然後(*a)內值再加1,此時在這個{}內a 變成了 6}s=s+f(&a);   //此時s = 5,整個檔案內全域性變數int a = 2 ,在上乙個{}內區域性變數不起作用了。

//s = s + f(&a) = 5 + 2 = 7//此時(*a)內值加所以輸出結果a = 3 ,s = 7

}以下是codeblock內執行結果

a=3  s=7

14樓:匿名使用者

這部分裡面重新宣告了變數a,使用的就是區域性的這個變數;

出了}之後,這個a的生命期結束,再使用變數a時用的就是外面宣告的全域性變數。

return(*a)++;

++在後,返回值是自加之前的值,然後自身加1,所以第一次返回5,然後區域性變數a變成6,第二句函式f返回2,加上5就是7,全域性變數a變成3。

15樓:吳龍

主要還是定義的變數作用域的問題。

還有乙個容易忽略的問題,return (*a)++;這句話的意思是 先返回*a,然後*a++,即最後*a增一。不是直接返回(*a)++。

進入main函式,定義變數s=0;

下面這裡有個,相當於乙個作用域,也就是裡定義的變數只在這裡面有效,出了,針對的就是外乙個作用域。由於在定義變數a=5,是區域性變數,所以s+=f(&a),s=0+5=5,同時內的a加以1,a=6;然後出了,作用域消失,內定義的a,銷毀。

然後s+=f(&a),此時的a就是全域性變數的a=2,所以s+=f(&a),s=5+2=7,同時a+1=3;

最後輸出,a=3,s=7.

16樓:匿名使用者

這裡有2個a變數 乙個是全域性

變數 乙個是函式內的變數。

第一行全域性變數a=0 (下面我們用a1表示他)在main函式中

int a=5;

s+=f(&a);

這個a = 5 是區域性變數 (我們用a2表示)經過上面計算後 s=5 ;a2=6, ; 下面s+=f(&a);

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

都是a1 ;所以s = 7 ,a1 = 3了結果就是c答案

17樓:周生

這涉及到兩個問題

1 return之後是不會再執行++操作的

2 區域性優先原則,但是區域性變數只在宣告他的區域性有效,出了這個區域性就失效了

18樓:匿名使用者

在main函式中{}中的int a的作用域僅限於這個{}內,所以出了這{}後s=5,而a仍然等於2,然後s+=f(&a); 就使得s=7,a=3了。這題主要考察的是變數的定義域,第乙個a=2是全域性的,第二個是區域性的,只限於那個{}內。起始說白了就是

int a;

}這種情況,區域性定義有效,但是出了{}就是外層的定義有效了。

19樓:使者

輸出的a是全域性的a,第乙個s+ 計算的s= 0 + 5;第二個s = 5 +2

20樓:匿名使用者

這是一道函式呼叫題,void main()為主函式。程式先執行主函式,所以到第乙個 s+=f(&a);又因為它是呼叫的,要看到這裡 int f(int *a)

實參把a=5;賦給形參,由於是return(*a)++;所以s=5;

到第二個 s+=f(&a);

而第乙個 int a=2; 是全域性變數

所以s=7;

第乙個 int a=2; 經過 return(*a)++;後也變成3了

21樓:小拇指亦有愛

int a=2; 全域性變數

int f(int *a)

void main()

//區域性失去作用,

s+=f(&a); //相當於s=5+2 ,然後a+1=2+1=3

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

}a:2 7

b:2 10

c:3 7

d:3 11

22樓:匿名使用者

我認為是3,9,求大神解答

23樓:張祿

在看看指標和引用那裡

24樓:匿名使用者

區域性變數全域性變數 呵呵 上面解釋的很清楚

25樓:pprain_水杯

第二個s+=f(&a);使a+1

關於c語言的題目,如圖,求大神詳細解釋,謝謝

include。部分是c語言中的一些庫,如果不引用這些庫函式下面log 函式和sqrt 函式就無法使用 double fun int m 定義乙個帶int 型別引數m,函式名為fun,返回值型別為duoble的函式 下面是函式的內容定義int型變數作為迴圈的計數器,還定義了乙個double型別的變數...

C語言程式問題,求高手 C語言問題,求大佬解答

我嫌麻煩是否可以把print star 換成別的字母 是可以的,可以按照你說的換成void a 也行。這只是初學者用用。你以後開發大程式,這麼多函式,你能分得清什麼函式做什麼用麼?所以要養成好習慣。括號是帶參。下劃線也沒有什麼固定的意義,就是增加程式的可讀性。不懂再問。望 可以。裡面是用來放引數的 ...

求C語言輸出結果,最好詳細解釋一下,謝謝

輸出是 y 20 y 20 if.else if.else是相互互斥的,他們之間只有乙個會被執行。在你的程式中,x開始時是10,大於3,所以進入到if x 3 下面執行,y x 2,所以y為20,printf y d n y 輸出y 20 然後跳出if.else if.else這個結構,直接執行最下...