關於變長陣列(vla),即陣列的一種不一樣的表現形式,通過使用變數表示陣列的維度。如:int a=4,b=5;double c[a][b];//這就是乙個變長陣列。變長陣列必須是自動儲存類別,這就意味著無論在函式中宣告還是作為函式的形參宣告,都不能使用static或者extern儲存類別說明符,而且不能在宣告中初始化它們,而且在函式形參中宣告時,要先對兩個維度做宣告,然後再宣告陣列。
關於字串字面量:要在字串字面量中使用雙引號,必須再雙引號錢面加上反斜槓』\『,如:」run ,stop,\」run"。當對陣列做字串初始化時,可以這樣賦值a[20]="sdjlkfjsdkfsasjdl",還可以a[20]=注意後面對空字元,沒有這個空字元,這就不是乙個字串,而是乙個字元陣列。而且sizeof()測長度時會包含這個空格,而 strlen則不會。
對於陣列名和指標名的區別:陣列名是不能更改的,它是乙個常量,不能做左值,可以進行++a這樣的操作,陣列的元素是變數,陣列名不是變數。但是指標名是可以進行更改的,指標名是變數,可以做左值。
此外,建議再把指標初始化為字串字面量時使用const限定符,這是因為,對於當前的c而言,使用指標修改這個字串是未定義的,即char *p="jisdfsa"; p[2]=w';是未定義的 。因此,如果打算修改字串,就不要用指標指向字串字面量。
如果建立陣列來訪問多個不同的字元,可以通過這兩種辦法:1.const char *a[3]=;即陣列指標的形式。2.b[3][30]=,但第二種陣列中的每個元素大小已經規定為必須相同了,即30;而陣列指標則每個元素的不同,它採用連續存放的形式。這樣陣列指標占用的空間就要比二維陣列要少。由此,要用陣列表示一系列待顯示的字串,請使用指標陣列,因為它比二維字元陣列的效率要高。
關於字串的輸入輸出,除了常用的輸入語句scanf之外,還有專門用於輸入"gets()"函式,"fgets()"函式,"gets_s"。gets因為它無法檢查陣列是否裝得下輸入行,所以一直處於要被廢除的狀態,gets()函式的讀取是整行輸入,直到遇到換行符,然後丟棄換行符,儲存其他字元,並在這些字元末尾新增乙個空字元('\0')使其成為乙個c字串。而fputs()函式因為它可以通過第二個引數限制讀入的字元解決溢位問題這一功能,所以一直被引用。關於它的第二個引數限制輸入的數量問題,如果這個引數為n,那麼將會讀入n-1個字元。而且當它讀到換行符時,會把它儲存在字串中。
它的第三個引數是用來指明要讀入檔案,如果要讀入從鍵盤中輸入的資料,則以stdin作為引數,該識別符號定義在stdio.h中,對應的它的輸出函式fput()的第三個引數要使用stdout。注意當fgets()讀入的字串超過要求的長度時,要在對應長度字元的後面加上乙個空字元'\0'。區別於fgtes,gets_s(words,stlen)函式只從標準輸入中讀取資料,,所以它不需要第三個引數;如果gets_s讀到換行符,它會丟棄它,而不是儲存。關於puts()函式,它在輸出時會自動在字串結尾加乙個換行符,而puts如何停止輸出呢?當函式遇到空字元時,所以必須保有空字元,否則,puts()會一直輸出,直到發現第乙個空字元為止。
個人對「陣列與指標」的重點筆記(中)
我們在初學陣列和指標的時候經常會碰到這樣的題目,要求乙個陣列的元素和,並要使用陣列,指標和函式。我們往往要呼叫乙個函式實現迴圈,並且在形參中引用乙個指標指向陣列的第乙個位址,然後用乙個整形參量做迴圈的界限,這個整形參量一般是陣列的元素個數,然後通過迴圈一次次相加。其實這種方法還沒充分利用指標,指標的...
對陣列和指標的思考
最近學習了一點彙編和作業系統的知識,看的過程中對陣列和指標有了一些不同的新的認識,陣列到底是什麼。先貼 看看現象 段1 include void main 段2 include void main 這兩段 在vs2015和code blocks上編譯均沒有錯誤。段1在vs上甚至會有執行結果輸出!結果...
對陣列指標的理解
整型陣列 int a 5 整型指標int p 可以存放其元素位址來進行指標訪問 字串陣列char str 5 10 該怎麼通過指標訪問其中的字串元素?字串是個陣列,所以要用陣列指標 p 即指向乙個什麼型別的陣列的指標 這是乙個寬度為10的字元陣列 所以需要 乙個寬度10的字元陣列的指標。即char ...