C 的學習筆記(第四章 陣列及自定義型別)

2021-08-13 23:20:56 字數 3393 閱讀 6988

目錄

陣列列舉型別

結構型別

聯合型別

正文一。陣列:定義陣列:注意點:陣列對sizeof的使用;還有對傳遞後的陣列的使用。

注意區分陣列和字串。【主要有兩點區別 1:字元陣列的結尾必須搞個'\0'(ascall碼值為0);2.陣列可以實現定位這個功能】

陣列的初始化:a:初始化的未賦值的值的情況 b:陣列的上限。

字元陣列的定義:a:注意字串有兩種表現方式:一是字元陣列(又有兩種情況,一是字元陣列,二是陣列指標),二是string類的使用。

b: 字元陣列的結尾必須以『0/『結尾,自定義分別賦值的話,必須要自己給值,如果想要從中間截斷必須直接令它為0,如果是陣列的話。直接令它為0就可以了,而如果想要在字串中間的話,\0;如果想要在陣列初始化的時候就搞定的話,那麼就要記得在\0的後面打空格就好。

多維陣列:a:有一種給所有值為0的方法;

b.如果不給陣列的資料的話,只能空第乙個(想一下就知道為什麼了)。

c.你猜猜多維陣列是怎麼存放在記憶體裡面的...(是按順序的啦,手動滑稽,對了給乙個公式 n!+(n-1)!+··· 記住n是代表維度的)

陣列的賦值(a:遍歷;

b:用」strcpy[已經被淘汰,換為strcpy_s 新的函式,是在中間加長度的(記住字串長度+1的)](str1,st2或」 「)或者strncpy函式【加乙個n)

陣列的輸出(遍歷)對了,只有字元的陣列名輸出是直接輸出陣列內的元素(string都不可以)

二。列舉型別:(列舉型別的處理的目的是為了將某些有範圍的數給乙個範圍)

列舉型別的賦值:day=mon/(weekday)0[後乙個是因為weekday現在就相當於int一樣]

三。結構型別   (結構型別是用來將不同型別的資料存放為乙個整體,而且它和類不一樣,比類低階一點,只能儲存資料,我們可以看到物件化處理的影子,或許說,類就是在結構型別和函式的基礎上誕生的,物件化的思路更有利於處理)

結構型別的定義

結構型別的初始化

結構型別的使用

結構陣列的使用(新的技能,目測這個玩意可以定義相同型別的n多的東西)

講一下這個玩意的語法吧

四。聯合型別(可以用來省記憶體?炫技?避免重用?)

這個玩意吧,貌似很有用處,不過目前沒有體會到,完了在補好處

聯合型別的定義  有一種呼叫叫做無名呼叫

聯合型別的呼叫

聯合型別的特點 :a:只能呼叫其中之一

b:成員的記憶體是最大的那乙個

c:不能對聯合變數名賦值和初始化,也不能做函式的引數和返回值

說一下語法吧:union

應用a:字串或者陣列長度的總結

sizeof對陣列的求法:記得是求所佔的實際空間(既總空間,算上了0,而且沒排滿都要算)。而且還有乙個陣列退化為指標的注意點,記住有時候(逐個賦值,結尾不給0時不會)會+'\0';

對string字串的求法:(從網上摘取)不同的字元所佔的位元組是不同的。

ascii碼:

乙個英文本母(不分大小寫)佔乙個位元組的空間,乙個中文漢字佔兩個位元組的空間。乙個二進位制數字序列,在計算機中作為乙個數字單元,一般為8位二進位制數,換算為十進位制。最小值0,最大值255。如乙個ascii碼就是乙個位元組。

utf-8編碼:

乙個英文本元等於乙個位元組,乙個中文(含繁體)等於三個位元組。

unicode編碼:

乙個英文等於兩個位元組,乙個中文(含繁體)等於兩個位元組。

符號:英文標點佔乙個位元組,中文標點佔兩個位元組。舉例:英文句號「.」佔1個位元組的大小,中文句號「。」佔2個位元組的大小。

對結構型別的處理:結構型別的記憶體必須是4的整數倍,所以必須補4位元組

對聯合型別的處理:聯合型別的最大值

對列舉型別的求法:按照int型的去算

strlen 求的是實際的長度,所以遇到0就會結尾,而且不算0,但手動新增的話就會算0,而且一定要算到0結束的那一位;

str.length 可以求字串的長度,不帶0

對陣列的空間的預留一定要夠,你要明白預留的空間是必須的,而「」是自動新增的,『』是手動新增的。

b:氣泡排序(這個玩意可以用來排序的,是擁有好幾個版本的經典之作,基本的原理是順序交換,多次排序)

氣泡排序的基礎版本

遍歷所有的元素,實現每個元素之間的交換,這是內層,外層是多次呼叫內層,呼叫次數是n-1次

氣泡排序的更新版本

a:每次比較的範圍可以縮小,每次減一

b:每次比較可以加乙個判斷,如果交換的次數為0,則停止迴圈。

c.大小寫的搞定方法

1:可以用ascall碼來搞定

2:可以用庫函式 tolower,或者說是toupper來搞定

補充:對陣列的補充:a:如果乙個指標後面加上陣列的方括號,那麼這個指標的含義就變成了陣列(其實我們可以從原理上來看一下這件事情,因為陣列名的本質也是位址,而指標的內容也是位址,那麼這兩者應該是貫通的關係所以可以這麼執行);

b:如果對於乙個多維的陣列,只引用它的高維的陣列維度的話,那麼去找這個高維裡面的第乙個元素,就是這個位址所代表的元素。

c:i/ofile.close();括號很重要。

d。ofile 是刪除了文字裡原有的,或者新建乙個文件。

e。陣列的位址的偏移方式

1.&a[i]+b;

2.a+b;

f.聯合型別的時候可以用  int c;( mon==c)來判斷兩個東西是否相等。

g.對於陣列名還可以用來搞位址,而結構體搞出來的名字不能搞位址,列舉型別搞出來的名字也不能搞位址。但是列舉型別可以直接的輸出。

h.getline的講解 getline(char*pch,int n,char)這個東西可以用來從一堆輸入的字元中搞定讀取資訊。

對結構型別進行賦值的方法也是有兩種,可以乙個乙個去給值,也可以讓兩個相同型別的去賦值(但是陣列不可以,因為陣列的名稱代表的是位址)。

對列舉型別的賦值也有兩種,一是直接用化名來賦值;二是用強制型別轉換。

j.而不巧,對高維的陣列有

int a[3][3] = ;

cout << *a << endl;

cout << a << endl;//我們可以看到對前兩個的輸出內容是一樣的,因為輸出的是首位址

cout << a + 1而對待高維陣列的話,我們可以傳的是高維陣列取一回指標後的結果(但是不可以傳陣列的名字),也可以傳的是&a[0][0];

而形參的話可以選擇*p,或者是p[ ](陣列指標稍後回來)

哈哈哈,陣列指標回來了:emmm

字元陣列指標:char as[ ]=可以寫as[1],as[2],as[3]

陣列指標的一維情況:沒啥要說的

陣列指標的二維情況:在定義的時候,必須指出的是一維陣列的大小,例如:char a[3][4],(*p)[4];

然後重點來了:*(*(p+行)+列)

再補充乙個有趣而又麻煩的事情,就是,char *p[4] 這個東西的使用,p[1] 或者說是*p,前者是來出一整個的,而後者是用來出乙個字母的

C 第四章 陣列

二維陣列 陣列是一組相同元素的集合.陣列的建立方式 type t arr name const n type t 是指數組的元素型別 const 是乙個 常量表示式,用來指定陣列的大小 陣列建立的例項 1 int arr1 10 2 int count 10 int arr2 count 3 cha...

K R學習筆記 第四章

全面系統的講解函式了。首先映入我眼簾的是一種奇怪的函式宣告方式 main 它在main函式中宣告了自己編寫的atof char 函式。至於原因是什麼,我也不得而知了。按照書上的說明,c 是不允許在乙個函式裡定義其它函式的,函式本身是external的。下面的 include int main voi...

第四章 python學習筆記

1 字典 字典是由 鍵值對 組成的無序可變序列 字典中每個元素都是乙個鍵值對 包含乙個 鍵物件 和乙個 值物件 鍵 是任意不可變資料 一般由 整數 浮點數 字串 元組 組成 鍵 在字典中是唯一的 不能重複 否則會被覆蓋 建立字典的方法 1 a 2 a dict name dafu age 18,jo...