多維陣列做函式引數的退化

2021-09-26 01:20:54 字數 1441 閱讀 2291

退化過程:

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 他先拿著第乙個數字和下面乙個去比較 第一輪比較下來之後...