當前位置:首頁 » 編程語言 » c語言輸出結果主函數的值不變
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言輸出結果主函數的值不變

發布時間: 2022-04-26 10:47:55

c語言題為什麼運行後輸出結果不變啊

你的疑問應該是在f()函數中為什麼明明修改了結構體的值,但是實際的結構體確沒有改變。
這是由於c語言中的方法參數傳遞分為傳值引用(形參,在方法中修改的值只在方法中有效)和指針引用(實參,可以直接修改實際結構體或參數的值),而你問題中的代碼屬於形參傳遞,所以在main函數中列印的結果沒有變化。希望對你有用!

Ⅱ C語言中,調用函數時,實參在函數里改變了值,那在主函數里是原來的值還是改變了的值呢

INT是值類型 變數存儲的是真實的值 傳參時在目標函數內再用一段內存把值復制過去,改的只是change函數里的變數a main函數里的沒變

指針是引用類型 變數存儲的只是一個內存地址 傳過去的也是內存地址,修改的是根據那個地址 找到的真實值

Ⅲ C語言:這道題在子函數輸出的是3,2。那主函數輸出的值沒有變,是不是因為fun函數的類型是void

不是的,是因為你的函數的參數是傳值的方式傳輸的。
也就是理解為,main函數和fun函數是不同的函數,裡面的值,就算是相同名字的變數,但實際上是不同的變數,因為他們所在的函數不同。所以main里的xy與fun里的,相互獨立。
只是在在fun函數調用的時候,將main中xy的值賦給了fun中的xy;改變fun中的xy,main中的xy並不會改變!

Ⅳ C語言:同樣類型的兩道題,結果是主函數的值都沒有變,我知道可以利用指針的方法進行地址傳遞,但要是單

當然還是不行,首先C里函數不能返回兩個值,除非你把它做成個結構體,那也是只return回一個變數而已

Ⅳ C語言問題!為什麼這三道題輸出結果沒有變,請詳細解釋下,指針不太懂。謝謝!ps題中大小寫有錯,不用

第一題:fun(a,5),則p指向數組a的首地址,然而在fun函數裡面的for循環,p=b,則指向b數組的首地址,跟a無關了。其次,printf("%s\n",A); A哪裡來的?C語言是區分大小寫的。

第二題與第三題:*s=a,s指向a數組首地址,然後在fun函數里,s又指向別的地址去了,所以函數里的操作與main里的s 無關,main里的s還是指向a數組首地址,所以*s的值還是a數據的第一個。

這就是實參和形參,不同函數你想像為不同的空間。在main函數把值傳給fun函數,也就是值復制過去一個,怎麼變都不關main函數裡面的事,但是fun函數是用指針,就是main函數變數的地址的,就能影響到main函數的變數了。然而fun函數的指針又指向別處了,就又跟main無關了!

Ⅵ C語言,為何輸出C的內容不變,調用里不是把b都賦值給a了么

f(c)的參數是值傳遞,不會改變c的值,調用f()函數的時候相當於是把c的內容復制了一份作為參數a傳遞給了f()函數,對c本身的內容並不會產生影響。

Ⅶ C語言,指針,函數 為什麼在函數中改變了指針主函數依舊不變 書上給的看不是太懂

C++可以通過異常處理的throw和catch來實現從子函數的子函數直接返回主函數,匯編語言可以用jmp指令跳轉實現這個需求。C語言主要靠函數調用和return在函數之間切換,很難做到在多層調用中直接返回主函數。雖然goto語句可以無條件跳轉,但是必須在同一個函數中使用。因此解決的方法也是用一個特殊的值作為需要返回的標志,然後在兩層調用函數中都遇到該值就返回,但是這個方法也有兩個前提:1)你的兩個子函數都是由返回值的函數2)你選擇的特殊值和函數正常的返回的取值不會沖突,不會引起二義性。因此建議你的這個問題還是用C++ 的異常去解決比較好。

Ⅷ C語言 第八題函數值為什麼不變呀

你沒有理解輸出的是什麼

輸出的*p,*q,指的是*p,*q對應內存地址的值,而不是p,q本身的值

雖然p,q在main過後互換了值,但對應地址指向的值是不變的。

也就是說其實main過後*p=j,*q=i

明白了嗎?

我特意跑了下這個程序,順便輸出了*p,*q對應的地址供你加強理解。

Ⅸ c語言在子函數中給形參賦值,為什麼主函數中的形參值卻不變

簡單理解為main給f1傳參數時,把a、b、c復制了一份。f1里的abc與main里的abc雖然長得一樣,但只是克隆體

Ⅹ C語言中,為什麼有的輸出結果主函數的值不變啊,我有點迷

看來你的C語言功底要加強一下了,說笑的!!!
在函數里調用另一個函數fun,要使用指針的方式才能改變它的值,如fun(int *x, int *y);
如果不使用指針而直接值傳遞調用,那麼在調用完fun函數後,該函數做佔用的內存、堆棧都會被釋放,即a、b的值還是以前的,不會被改變;
使用指針的話,它會直接修改指針所指向的內存的值(const除外),從而達到交換的目的。