今天寫了個判斷陣列中資料的最大值問題的**,發現了乙個有趣的情況,陣列溢位值總是乙個;
現附上今天寫的判斷陣列最大值的**:
#define _crt_secure_no_warnings 1
#include#includeint main()
; int max_num = 0;
int i = 0;
for (i = 0; i < sizeof(arr) / sizeof(int); i++)
} printf("最大值為:%d\n",max_num);
system("pause");
return 0;
}
問題發現是這樣的,之前在for迴圈之外還寫了個while迴圈進行判定(不知道怎麼想的,寫了個while迴圈),大概就是這:
while (arr[i])
} }
本來想的是arr[i]的i值取值超過資料限定,當前arr[i]值應該為null(這是錯誤的猜想);結果發現沒有輸出值了,單步後發現arr[i]的溢位值為乙個常數,不為空,進入了while死迴圈。
就如上所說,這個溢位值是-858993460,給了兩個陣列結果還是一樣。
#define _crt_secure_no_warnings 1
#include#includeint main()
; int arr1[100] = ;
int i = 0;
int j = 0;
for (i = 0; i < sizeof(arr) / sizeof(int); i++);
for (j = 0; j < sizeof(arr1) / sizeof(int); j++);
printf("%d\n", arr[i]);
printf("%d\n", arr1[j]);
system("pause");
return 0;
}
經過查閱知道,當你的陣列溢位時,vs會自動給你的變數進行賦值操作,而我的這個是int型變數,系統自動賦值為-858993460,並不存在什麼溢位即為空的猜想。
另外給出的char型變數進行的溢位判斷如下
#define _crt_secure_no_warnings 1
#include#includeint main()
; //int arr1[100] = ;
char arr[20] = "a,b,f,g,s,t,y";
char arr1[100] = "d,k,l,y,r,s";
int i = 0;
int j = 0;
for (i = 0; i < sizeof(arr) / sizeof(char); i++);
for (j = 0; j < sizeof(arr1) / sizeof(char); j++);
printf("%c\n", arr[i]);
printf("%c\n", arr1[j]);
system("pause");
return 0;
}
其溢位值都為 ? (注:字元型陣列需要用「 」 雙引號,而不是大括號)。 c語言之堆疊溢位問題
對於c來說,函式呼叫,系統要做三個工作 這裡多提一下,關於陣列作為形參呼叫函式時,為什麼需要連同陣列長度一起傳進來?這裡是因為,陣列作為引數傳遞的本質只是乙個指標,也就是乙個位址,編譯器並不關心這個位址後邊有多少有用資料,編譯器只看得到指標所指的資料。所以在被呼叫函式中,無法直接知道這個陣列的長度,...
c語言的算術運算溢位問題
1 關於溢位的結論 可能出現的情況是結果的資料型別定義的小了,導致結果不正確。關於計算溢位,看書上說的c語言中有符號數計算溢位的話會不知道發生什麼 溢位結果未定義 看編譯器怎麼處理。我在keil上試了下,溢位會把溢位部分砍掉,比如定義的是short型的,結果保留2個位元組。short aa 3276...
有關C 陣列溢位問題,C 陣列可以開多大
乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其 操作方式類似於 資料結構 中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時 可能由os回 收 注意它與資料結構中的堆是兩回事,...