C語言 補習填坑 資料處理

2021-10-20 01:56:57 字數 2991 閱讀 5090

最近快開學了,寒假一直在學習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+iarray[i]

研究了很久最終寫出以上**,主要問題在二維字元陣列的實參傳遞上。

※難點①(區分陣列指標、指標陣列、二級指標)

※難點②(指向字元陣列的指標陣列解引用)

後來寫部落格的時候發現,也不是這麼難,主要是理解上面的指標區別。

記住以下等價即可

*(array+i)可替換為array+iarray[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...