1樓:
①可為什麼下標引用超出定義沒有錯誤
因為宣告char陣列的時候,b只是被宣告為指向char陣列第一個地址的指標。用操作符取資料的時候,編譯器看成是首地址向後偏移 (char型別的長度 * 序號),超過了界限之後,至於後邊取到什麼意外資料就不一定了。所以一般需要使用char陣列儲存一個長度為n的字串的時候都宣告n+1長度,然後,操作完後把b[1]='\0'。
如:char dog[4] = ;
char wolf[4] = "ply";//引號括起來的字串隱藏帶'\0'
②果把下面for部分取消註釋執行結果又只能輸出一個d,這裡又是怎麼回事
for(i=0;i<=(sizeof(b)/sizeof(b[0])-1);i++);
看到沒,你在括號後邊多加了個分號,執行完i就=3了,然後就輸出b[3]了。。。
③不帶宣告陣列大小
char b=;
另外關於字元陣列:
sizeof(陣列)計算的是整個陣列的長度。而strlen()計算的是陣列中可見字串的長度。
char表示的字串是c風格的字串,後面都要有'\0',否則不是字串;引號括起來的字串隱藏帶'\0':
初始化時陣列長度不設時,編譯器會根據內容計算元素個數:int myarray =
陣列只有初始化時可以用“=”,其它時候均不可以給陣列直接賦值。
還有什麼。。。可以用cin.get(char, num)來輸入。。還有一時想不起來了。。。
關於c++char型別陣列長度的問題
2樓:匿名使用者
strlen其實輸出的陣列中儲存的字串的長度,而不是陣列的長度
3樓:愛你的我_義
首先,這樣程式設計是有風險的,因為你定義的陣列沒有進行初始化,也就是說 你陣列中可以是任何資料,可能是字母,可能是數字,都不確定,放到實際工程專案中,容易造成記憶體洩漏或溢位.
其次,strlen獲取的是字串長度其中不包括結束符/0 所以,第一個輸出9說明這時陣列中剛好有9個元素.
如果你初始化陣列為0後,列印應該是11,因為陣列是從0算起的.
4樓:
只宣告並未初始化,記憶體中的資料未可知。用vs2010第一個輸出我的是20.
5樓:匿名使用者
s開始沒有賦值,列印出任何值都是可能的
s = ; 這個能編譯過麼?vc6下直接編譯不過
C 關於陣列的問題,c 的乙個關於陣列的問題
1 主要問題在陣列的動態分配。main 以前 應當寫宣告,不能寫語句。所以把開始的幾句改成 include using namespace std int n1,n2,n3 int data1,data2,data3 改成這樣 再把 main 開始改成 int main n1 n2 n3 100 d...
c指標陣列問題,C 中關於指標陣列的問題。
typedef 是 定義一種資料型別 就好像內建的資料型別如 int 它僅是乙個定義,不產生例項物件,即不分配任何記憶體,怎麼能給它賦值呢?對陣列賦初值的方法用for迴圈,在這裡還可用memset nod的記憶體分配在動態棧上,所以值不能確定,要初始化,必須使用顯式的方式。cdma980的回答是對的...
c關於二維陣列的問題
include stdafx.h include conio.h include using namespace std void matrixchain int p,int n,int m 7 7 int s 7 7 void traceback int i,int j,int s 7 7 int...