C語言複習 第二波

2021-08-03 19:40:31 字數 1674 閱讀 8138

int a = 10;

int arr[10];//這種定義在c99下是合法的,只不過所有windows下的編譯器都不支援,在gcc下可順利執行。

指標陣列:指標陣列可以說成是」指標的陣列」,首先這個變數是乙個陣列,其次,」指標」修飾這個陣列,意思是說這個陣列的所有元素都是指標型別 。

char *arr[4] = ;  

//這個陣列呢有四個元素,每個元素都是char*型別的指標。

陣列指標:陣列指標可以說成是」陣列的指標」,首先這個變數是乙個指標,其次,」陣列」修飾這個指標,意思是說這個指標存放著乙個陣列的首位址,或者說這個指標指向乙個陣列的首位址。

char (*pa)[4];

//pa是乙個指標指向乙個char [4]的陣列,每個陣列元素是乙個char型別的變數。

int brr[3][4] = ,,};//brr[0][6] = 6 因為二維陣列的分配是連續的,所以當看似越界時,可先往後分析。

void show(int arr[3][4])

int main()

這個部分最重要的應該就是結構體的位元組數問題。

位元組對齊的細節和編譯器實現相關,但一般而言,滿足三個準則:

1) 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除;

2) 結構體每個成員相對於結構體首位址的偏移量(offset)都是成員大小的整數倍,如有需要編譯器會在成員之間加上填充位元組(internal adding);

3) 結構體的總大小為結構體最寬基本型別成員大小的整數倍,如有需要編譯器會在最末乙個成員之後加上填充位元組(trailing padding)

如果不進行記憶體對齊,cpu在訪問時效率就會很低,例如結構體裡面有個char有個int,假設記憶體每次訪問四個位元組,不進行記憶體對齊,則先訪問char和int的三個位元組,再訪問int的第四個位元組,然後剔除第乙個位元組,合併第二個到第五個位元組,很麻煩。

//32位下,所有指標型別都是4位元組,64位下所有指標都是8位元組

/*1、找出結構體中最寬的基本型別成員大小。

2、依此大小為寬根據位元組對齊準則進行計算。

*//*32位下 24位元組

a(4) d(4)

b(4) c(4)

e(8)

64位下 32位元組

a(8)

d(8)

b(4)c(4)

e(8)

*/struct t ;

int main()

date; //20

/*記憶體分布如下:

cat(4) a1(4)

a2(4) a3(4)

a4(4) a5(4)

dog(8)

*/struct data // 32

too;

int main()

{ date max;

data d;

cout

va_start(list,a);//找到...開頭

va_arg(list,int);//從...取資料

va_end(list)//判斷結束

C語言複習 二

引言 不會將每乙個部分都詳述,只關注於一些自己認為重要的或常錯的,若有不足,還望指出 switch 細節 括號內必須是整型或列舉型別 遇到break才會跳出 case包含的必須是常量 continue 停止本次迴圈,重新開始下次迭代 函式的三要素 返回值型別,函式名稱,形式引數列表 在呼叫函式時,需...

C語言複習總結篇(二)

1 棧stack 棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂 top 另一端為棧底 bottom 棧底固定,而棧頂浮動 向低位址擴充套件的資料結構,是一塊連續的記憶體區域 棧中元素個數為零時稱為空棧。插入一般稱為進棧 push 刪除則稱為退棧 pop 棧也稱...

C 複習筆記 第二次

物件導向的基本特點 抽象 例項 鐘錶類 class clock 封裝 類與物件的定義 設計類就是設計型別 要考慮到這些 類成員的訪問控制 類的成員函式 內聯成員函式 建構函式 建構函式的作用 建構函式的形式 隱含生成的建構函式 預設建構函式 default 給建構函式賦初值例 class clock...