c 高手進來

時間 2022-07-24 08:00:02

1樓:匿名使用者

新手了吧

c++是不檢測記憶體越界的,你宣告瞭char ch1[5],那麼ch1就是指向一個記憶體地址的指標,並且從那個地址開始的5個位元組保留(不會分配給其他地方使用),但是你仍然可以讀寫ch[7],寫到哪兒了呢,從ch1開始的第八個位元組處,這個位置的記憶體本來不是給ch1準備的,可能分配給其他變數了,比方說ch2,也可能沒有分配出去。如果已經分配給其他變數,那麼你ch[7] = 'a'這樣的操作就會改寫別的變數。

所以你寫長點沒關係,只是會繼續佔用後面的位元組。

記憶體越界是c++中一個非常重要的問題,很容易發生(如果不注意**結構的話),並且出錯的話很難找到。

但是為什麼編譯器允許這種愚蠢的記憶體越界呢?

你可能聽說過c++快,快就快在這些地方了。檢查需要時間阿,如果你編碼的時候保證不越界,那麼所有的檢查都是浪費cpu

2樓:

ch1已經是一個指標了,cin>>ch1;這句話是把你輸入的數按ch1首地址開始順序儲存,你用ch1這個名字就是指標的概念了,而ch1[0]才是字元。

c 程式設計,高手進來賜教!!!

使用輾轉相除法 int t,r 定義兩個變數t,r if num2 num1 判斷如果num2 num1,將兩者互換,使終使num1 num2 t num1 num1 num2 num2 t while r num1 num2 0 num1 num2 num2 r 迴圈求餘,如果餘數不等於0,則nu...

關於C語言的問題!高手進來看下

jisuan這個函式裡面的第一層for迴圈寫成0 3了,應該是x 3 還有,在輸入資料的時候,每輸入一個數字按回車,不要按空格 你好 我來也 輸入時,每輸入一個數,按一下回車 enter 鍵 輸入9個數後,你就看到輸出了。 ls在幹什麼。你的main函式裡呼叫函式的引數有問題,每次都不修改aa 3 ...

地理高手進來,地理地理高手進來

首先按照你題意說明得知俄羅斯人和英國人都是正確的,原因是地球是球形,俄羅斯人前進方向與地球自轉方向一致,而英國人反之,而以太陽為參照物地球轉一圈就是一天,他們兩剛好相向運動碰面 即剛好是地球一圈也就是一天 所以他們兩個日期差一天。其他問題答案 1,海南島緯度低處於熱帶地區太陽高度變化小,所以低溫時間...