1樓:
未採用引用:執行change()函式,交換a,b的拷貝,然後通過返回值來講交換後的值拷貝給main函式中的變數。但是change函式沒有返回值,因此只進行了a,b的拷貝交換(比如在棧裡面臨時建立的臨時變數x,y,接受到傳遞過來的引數值(a,b)複製給x,y,x,y進行交換),於是a,b的值不受影響;
採用引用時:執行change()函式,將a,b在記憶體中的地址傳遞給臨時變數x,y,此時對臨時變數x,y操作就是對a,b進行操作,因為x,y和a,b此時在記憶體中指向的是同樣的地址(其實,可以這樣想,引用就是變數的別名),那麼change()執行完後,a,b的值自然就會發生變化。
建議你好好看一下程式執行過程中a,b,x,y變數在記憶體中的位置分配和變化圖示,就會明明白。
2樓:匿名使用者
引用是 "傳址呼叫" 就相當於傳入了實參的地址.這樣就可以在函式中修改傳入的引數的在變數的值.
在change函式中,x的地址就是a的地址,y的地址就是b的地址.
打個比方,a和x就相當於一個人有兩個名字一樣.
3樓:孤鬆獨海
你就把引用傳遞當做地址傳遞就可以,也就是指標傳遞的功能一樣,兩者的功能是相同的,引用傳遞主要是可以直接寫變數名字,不用寫指標了
請幫我解釋一下這個c語言程式問題,謝謝
這道題來考點是運算 符自優先順序,負號 的運算子優先順序相等 表示式 x m 先試圖將m付給x 然後加1,但是前有有個負號 所以當負號和n進行運算的時候,x已經變成4了,所以x 4 表示式 x x 8 n 其中n先加1等於4然後去除8 等於2 所以 4 2等於 2 c語言問題,請高手幫忙解釋一下這個...
C語言關於稜形的演算法,請高手解釋一下
3全部你好abs 這個函式是求一個數的絕對值,需要加math.h標頭檔案,這裡列印菱形是從 2到2是以0為原點,第一個for是迴圈次數 也就是列印幾行。第二個for 是控制每行列印的空格和 的數量以構成菱形。i 2 j 2時 abs i abs j 2 不滿足 2,所以列印 空格 也就是當i 2時只...
c語言的題幫忙解釋一下謝謝,兩道C語言題,請幫忙看看,詳細解釋一下,謝謝
應該選b吧,整形資料int與字元陣列char儲存方式不一樣,將字串c表示的就是地址,輸入資料時,不用取地址符號 整數則需要 看書要仔細啊 因為c 是陣列,所以scanf 賦值的時候不需要 正確的是b c是陣列,陣列名本身就是一個地址,所以不必再寫取地址版符號 了。而b是一個整型變數,儲存在一個地址中...