退化過程:
void printarray01(int a[3][5]) // 4k
}}
void printarray02(int a[5]) // 5k
}}
void printarray03(int (*myarray)[5]) // 這就是陣列指標 6k
}}
多維陣列做函式引數為什麼會存在退化?(為什麼編譯器要設計成這個樣子)
如何證明二維陣列在記憶體中是線性儲存的?
// 證明二維陣列在記憶體中是線性儲存的
void printarray04(int *array, int size)
}void main()
} // 把二維陣列當一維陣列來列印
printarray04((int *)a, 15);
system("pause");
}
多維陣列做函式引數技術推演void printarray05(int (*array)[5])
void printarray06(int array[5])
void printarray07(int array[3][5])
void main()
} // 把二維陣列當一維陣列來列印
注意列印的值
c語言處理a[n]的時候,它沒有辦法知道n是幾,它只知道&a[0]是多少,將它的值作為引數傳遞進去了,
雖然c語言可以做到直接int func(int a[20]),然後函式能得到20這個數字,但是c語言並沒有這樣做
c編譯器本來就是高效的
等價關係
陣列引數
等效的指標引數
一維陣列 char a[30]
指標 char *
指標陣列 char *a[30]
指標的指標 char **a
二維陣列 char a[10][30]
陣列的指標 char (*a)[30]
陣列做函式引數的退化問題
include includevoid arraysort int a,int num void arraysort int a,int num void print array int a,int num int main int i 0 int num sizeof a sizeof a 0 n...
陣列排序及陣列做函式引數將會退化為指標
陣列排序 1.選擇排序思想 2.選擇排序初級 include include int main int a 10 int k 0 int j 0,i 0,temp 0 printf 排序前 n 排序前列印輸出 for k 0 k 10 k printf d a k printf n for i 0 ...
排序熱身及陣列做函式引數退化為指標引申
先說排序比較常用的是氣泡排序 先介紹個簡單的 氣泡排序的原理就是先獲取到每個陣列的元素 然後迴圈的和自己下乙個去比較 判斷是否大於還是小於 之後做下替換 例 int number 5 先定義乙個陣列 進行排序 for int i 0 i 5 i 他先拿著第乙個數字和下面乙個去比較 第一輪比較下來之後...