最近快開學了,寒假一直在學習sql、前端、flask等。c語言忘得也差不多了。
之前對於二維字元陣列一直有一些疑問,最近在做c語言作業的時候問題就暴露出來了。
於是開此篇記錄一下學習。
1、宣告(初始化)
對比pyhon記憶
str_list=
['abc'
,'def'
,'ghi'
]
c中
char str_list[3]
[4]=
;
或
char str_list[
4]=;
注意:對於二維字元陣列的定義**
輸出如下://指定二維(最小)
char str_list1[
4]=;
printf
("長度1:%d\n"
,sizeof
(str_list1));
//指定二維(更大)
char str_list2[
100]=;
printf
("長度2:%d\n"
,sizeof
(str_list2));
//指定一維二維
char str_list3[
100][4
]=;printf
("長度3:%d\n"
,sizeof
(str_list3)
);
長度1:12
長度2:300
長度3:400
從上面的**可以看出。初始化時二維陣列的第一維大小之所以可省略,是因為編譯器自動確認了後方{}
內的元素個數。
但為何第二維大小不可省略呢?
我們知道,二維陣列在記憶體中的儲存方式等價於一維陣列,即str_list[3][4]
等價於str_list[12]
(只不過第二種方法不能用str_list[i][j]
的方式讀取其中儲存的元素)
第二維的大小可以說是二維陣列的靈魂,只要定義時有了第二維的大小,即可將一維陣列等長摺疊(可以形象的理解為換行)起來變成二維陣列。
我們可以這麼理解,第二維的大小指定了一維陣列應該怎麼摺疊變成二維陣列,一旦第二維的大小沒有指定,摺疊的方式就沒有完全確定,程式語言是嚴謹的,所以第二維大小必須要確定。
2、二維字元陣列的指標
本來寫部落格的時候想寫個示例程式的,結果把自己又繞暈了,先挖個坑。。
#include
#include
intmain()
;//列印第一行的幾種方式
printf
("1%s\n"
,str_list1)
;//二維陣列名稱,char (*)[4]
printf
("2%s\n"
,*str_list1)
;//對名稱取值,char *
printf
("3%s\n"
,&str_list1)
;//對名稱取位址,char (*)[3][4]
printf
("4%s\n"
,str_list1[0]
);//首行位址, char *
// printf("%s\n",*(str_list1[0]));
printf
("5%s\n"
,&str_list1[0]
);//對首行位址取位址,char (*)[4]
printf
("6%s\n",&
(str_list1[0]
));//對首行位址取位址, char (*)[4]
printf
("7%s\n",(
&str_list1)[0
]);//對名稱取位址後取第一, char (*)[4]
printf
("8%s\n"
,&str_list1[0]
[0])
;//對首行首字母取位址, char *
printf
("\n");
return0;
}
有待繼續研究3、二維字元陣列傳參
最近寫了乙個split函式,通過分隔符分割str,然後將分割結果儲存在二維字元陣列中。
注意!!!
其中第三個引數為乙個二維指標陣列,例a[100][80]
// 分割文字,返回分割出的數量
intsplit
(char
*str,
char
*delim,
char
(*array)
[100])
return i;
}
研究了很久最終寫出以上**,主要問題在二維字元陣列的實參傳遞上。*(array+i)
可替換為array+i
、array[i]
※難點①(區分陣列指標、指標陣列、二級指標)
※難點②(指向字元陣列的指標陣列解引用)
後來寫部落格的時候發現,也不是這麼難,主要是理解上面的指標區別。
記住以下等價即可
*(array+i)
可替換為array+i
、array[i]
C語言 資料處理
在不使用scanf函式如何對輸入的數進行逆序輸出呢?首先要得到該數的位數,因為需要在順序輸出裡使用。如下 int getfigure int n return tmp 該數的位數 其次要清楚該處理什麼樣特點的數,對這個數的個位進行處理。例如 123 先對3進行處理,用這個數對10求餘得到3。但又如何...
C 資料處理
時間限制 1 sec 記憶體限制 64 mb 提交 92 解決 22 標籤 提交統計 討論版 做完大學物理實驗後,wyl同學得到了很多比例形式的實驗結果。比如1498 902,337 124等等。不過,老師對這些比例很不滿意。因為比例的數值太大,難以一眼看出與理論值的關係。對於上面這個例子,如果把比...
踩坑系列 python資料處理
最近利用python讀取txt檔案時遇到了乙個小問題,就是在計算兩個np.narray 型別的陣列時,出現了以下錯誤 typeerror ufunc subtract did not contain a loop with signature matching types dtype 作為乙個new...