C語言雜記 0x06

2021-08-21 11:48:03 字數 1000 閱讀 1061

陣列初始化

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 型別的...