有趣的越界異常 形參改變外部變數的值

2021-06-18 10:04:58 字數 571 閱讀 2852

下面是乙個同學錯誤的插入排序,可能很多人都犯過越界異常的錯誤。

有興趣的可以執行一下下面的c++程式,驚奇的發現外部變數size被改變了。

#include

using namespace std;

void print(int a,int length)

}void insertsort(int a,int size)

a[j]=temp;}}

int main()

;int size=10;

insertsort(a,size);

cout<<"size"執行結果是:size被改為1;列印輸出10;

下面解釋原因:

int a=;

int size=10;

首先在棧中開闢乙個陣列,在申請size變數,棧中內容是按位址減小的方向存放的,也就是說

size變數在 a[0]之前;注意到

while(j>=0&&temp

中j>=0發生越界,相當於把a[0]前的10也參與了排序;發生溢位,從而改變size的值

呼叫print()函式時,size=1,所以只列印出10;

有趣的實參與形參

一般方法的結構如下 修飾符 返回值型別 方法名 引數列表 方法體我們今天主要講的就是實參與形參傳遞的問題。在引數列表中的就是形式引數,簡稱形參。當方法呼叫時,形參就用被變數或者資料替換。而這些變數和資料就是實際引數,也就是實參。還有就是形參是可以選的。即可以沒有引數。如publicstaticvoi...

C 中使用形參改變實參變數的值

當實參為普通變數的時候 若形參為指標,例如 bash int main void swap int x,y 另外一種情況就是形參為引用引數,int main void swap int x,y 即不是將實際引數的位址傳遞到函式形參中,而是直接將物件名 變數名 傳遞過去 2.當實際引數為陣列的時候 當...

形參的數值改變不會改變實參的值

輸入a b兩個整數,用指標按先大後小的順序輸出a和b 正確 include void swap int p1,int p2 void main printf max d nmin d n max,min 錯誤 如下 1 void swap int p1,int p2 2 void swap int ...