Ⅰ 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除外),從而達到交換的目的。