C/C++ 語言 零碎知識點的總結(1)
??在大學近三年的學習中,零零散散的遇到過較多的知識和問題,但時間過長之后也會有所遺忘,為了克服這個問題,想到可以用博客來做記錄,方便模糊的時候回頭再學習,
首先,看代碼:
# include <stdio.h>
int main(void){
char side_a[] = "Side A";
char dont[] = { 'w','o','w','!'};
char side_b[] = "Side B";
puts(dont);
return 0;
}

??你是不是會對運行結果有點小驚訝呢,覺得使用 puts函式輸出的不應該是dont中的 “wow!” 字串么?為什么還會有Side A呢,又為什么不能是后面的Side B呢
??別擔心,博主來為您解答,
??知識點1 :puts()函式決議:
??相信,此刻路過該博文的靚仔萌妹們,一定已經很熟悉puts()函式的正確使用了,不了解的話也沒關系嘛,博主很細心的哈,已附上學習鏈接,
??1. puts()函式百度百科
??2. C語言puts()函式用法詳解
??我們重回話題,沒錯,puts()函式最重要的一個點就是,puts函式是遇到結束符 “\0” 才會結束的,否則,計算機會在記憶體中向下尋找,直到遇到空字符才結束,所以,沒有結束標志的話,puts函式可能會輸出亂碼來,
??知識點2 :C/C++ 各變數存盤的區域不同,
??C/C++程式中各變數在記憶體中的存盤區域:
??1. 記憶體堆疊區:存放區域變數名
??2. 記憶體堆區:存放new或malloc出來的物件;
??3. 常數區:存放區域變數或者全域變數的值;
??4. 靜態區:用于存放全域變數或者靜態變數;
??5. 代碼區:二進制代碼,
??此外,C/C++是沒有垃圾回識訓制的,因此,需及時的對堆資料進行銷毀回收,以防止記憶體泄露,就是我們熟悉的free()和delete()函式啦,而堆疊記憶體是動態釋放的,
??好了,可愛的你通過如上的簡單介紹后,一定已經猜到該代碼運行結果的原因了,哈哈哈,讓我一同揭曉謎底,

??首先,申明的均是區域變數,所以均在記憶體堆疊中分配的空間,而dont陣列中是沒有字串結束符 ‘\0’ 的,所以,在使用puts()函式后就會在記憶體堆疊中就近向后尋找包含結束符 '\0’的字串,一并輸出,
??又因side_a變數先于dont變數入堆疊,所以side_a位于dont之后,指標 p 向后查詢到side_a時剛好有結束符 ‘\0’,所以puts()函式運行到side_a的時候也才算真正的結束,
??好了,博文也算斷斷續續的總結完了,今天也是除夕,就祝大家新春快樂,“牛”轉乾坤吧!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259049.html
標籤:AI
