陣列初始化
int a[5] =;
注意:陣列和結構體不同,不能相互賦值
int a[5] = ;
int b[5] = a;//錯誤的
陣列作為函式的引數時
int
function(int
array[5]);
檢視編譯預處理之後、預處理之前的**gcc -e main.c
字串就相當於字元陣列,所有的字串最後一位都是』\0』
『\0』就是ascii碼為0的null值
字串是唯讀的
char c = "hello world\n"[0];//c = 'h';
但是
"hello world\n"[0] = 』a';
//編譯器會報錯說符串字面值是唯讀的,不允許修改
字串在做右值使用時自動轉換成指向首元素的指標,比如printf函式的具體實現裡面第乙個引數就是乙個指標
printf("hello");
其實就是傳乙個指標給printf
初始化字串的時候記得要進行計算字串結尾的null的長度,如果不計算這個長度,編譯器也不會進行報錯,對於後期debug會造成很大的麻煩
比如printf函式,當printf函式列印字串的時候其實就是列印首字元到null字元之間的部分,一旦沒有null字元,最後會出現陣列越界的情況,後果可能很詭異
語言雜記 0x0A
今天寫乙個字串反轉練練手,涉及到手動輸入字串時出現了一些問題 char s scanf s s 採用字元陣列的方式輸入的時候完全沒有問題,但是採用下面的方式的時候就會報錯 核心以轉儲 char s scanf s s 什麼是核心已轉儲呢?通俗的理解就是訪問了不能訪問的內容,如下 所以我們的char ...
C語言雜記 0x0B
首先看兩個例子 一 二 這兩個例子裡面不同的地方就是s的不同,c語言程式在執行的時候記憶體分配有這樣的規則 區域性變數在棧中自動生成記憶體,比如上面所說的s就是在棧中生成記憶體 而s 指向的內存在常量區,就類似於我們在所有程式之前宣告char s 100 一樣 棧由編譯器自動生成釋放,而常量區的記憶...
C語言雜記 0x01
ascii碼中 字元a是97,字元b是98,計算 a 1這個表示式,應該按照ascii碼把 a 當做證書值97,然後加1,得到98,然後printf把98這個整數值當做ascii碼來列印,列印出相應字元b 我們稱整型為 int 型,現在我們知道 char 型別本質上也是整數,只不過比 int 型別的...