C 陣列 二維陣列 函式引數

2022-05-01 17:36:08 字數 4161 閱讀 2450

一維陣列:

1 #include 2

using

namespace

std;

3int

main()4;

7/**通過指標的方式訪問陣列*/8

int * p =numbers;

9 cout << "

普通指標的方式訪問:\n";

10for (int i = 0; i < 5; i++)

11 cout << p[i] << "";

12 cout <

13/**14

在這裡面numbers 被解釋為陣列的第乙個元素的位址 即 &numbers[0] 而且還是乙個常量

15也有特殊的情況,例如:sizeof numbers是陣列大小

16*/

17 cout << "

陣列大小:";

18 cout << sizeof numbers << "

byte.\n

";//

5 * 4

19/*

*通過陣列指標的方式訪問陣列

20陣列的位址是 &numbers note:這和numbers值是一樣的!!!

21也就是說相同的位址 你可以用普通的指標指向 也可以用陣列指標指向

22區別就在於他們的指標運算

23*/

24int (*p2)[5] = &numbers;//

把陣列的numbers替換成(*p2)就是 陣列的指標了

25 cout << "

指標陣列的方式訪問:\n";

26for (int i = 0; i < 5; i++)

27 cout << (*p2)[i] << "";

28 cout <

29/**30

int * p 和 int (*p2)[5] 的區別

31區別在於他們的指標運算

3233

*/34 cout << "

p =

"<< p <

35 cout << "

p + 1 =

"<< p + 1

<< endl;//

4byte

36 cout << "

p2 =

"<< p2 <

37 cout << "

p2 + 1 =

"<< p2 + 1

<< endl;//

20 byte

38/*

*提到 陣列指標 就必去提到另乙個知識點 指標陣列

39陣列指標 是 指標

40指標陣列 是 陣列

41定義的時候 二者通常會混淆

42*/

43int * p3[5];//

指標陣列 每乙個元素 都是指標

44for (int i = 0; i < 5; i++)

45 p3[i] = (*p2) + i;//

p2是陣列指標 常作為二維陣列的指標使用

46 cout << "

我也不知道這是什麼操作:\n";

二維陣列:

1 #include 2

using

namespace

std;

3int

main()4,

8 ,

9

10};

11/*

*二維陣列的本質是 陣列的陣列、

12第一維陣列是3個一維陣列的位址、第二維就是普通的陣列

*/13

int * p[3] = ;

14 cout << "";

15for (int i = 0; i < 3; i++)

16 cout << p[i] << "";

17 cout <

18/*

*常規方式訪問二維陣列

*/19 cout << "

常規方式訪問二維陣列\n";

20for (int i = 0; i < 3; i++)

21cout <

26/*

*用指標陣列嘗試訪問一下

*/27 cout << "

用指標陣列皮一下\n";

28for (int i = 0; i < 3; i++)

29cout <

34/*

*用陣列指標

35int data[3][5] 的第乙個元素就是data[0]那麼他的 位址就是&data[0] 等價於data

36前面說過data是屬於的第乙個元素的位址, 而且還是乙個常量

37那麼問題來了 指向&data[0]的指標是什麼樣子的?

38data[0] 的型別是int[5] 那麼

39&data[0] 的型別就是 int (*)[5]

40*/

41int (*p2)[5] =data;

42 cout << "

用陣列指標訪問\n";

43for (int i = 0 ; i < 3; i++)

44cout <

49return0;

50 }

陣列與函式:

1 #include 2

using

namespace

std;

3void print1(const

int * p, int

len);

4void print2(const

int p, int

len);

5void print3(int p[5], int len);//

don't use const don't!!!

6void print4(int (*p)[5], int len);//

don't use const don't!!!

7int

main()8;

10int data[3][5] =11,

13 ,

14

15};

16 print1(numbers, 5

);17 print2(numbers, 5

);18 print3(data, 3

);19 print4(data, 3

);20

return0;

21}22void print1(const

int* p, int

len)

2329

void print2(const

int p, int

len)

3036

void print3(int p[5], int

len)

37cout <

46void print4(int(* p)[5], int

len)

47cout <

56/**57

([0]) 和 * 是相同的

58* 就是[0]

59p[5] 可以寫成 * (p + 5)

60p[5]實際做的事情就是先定址然後在取值的過程

61譚浩強老師在他的書裡面講過

補充:

1 #include 2

C 二維陣列作函式引數

變數在作用域裡面被宣告的是什麼型別,就當作什麼型別來用。1 引數是二維陣列,但是要指定第二維的維數。int array 10 10 函式宣告 void fuc int a 10 函式呼叫 fuc array 在函式fuc中,a是二維陣列。使用a i j 形式來訪問陣列中元素。2 引數使用一維指標陣列...

C 二維陣列作函式引數

變數在作用域裡面被宣告的是什麼型別,就當作什麼型別來用。1 引數是二維陣列,但是要指定第二維的維數。int array 10 10 函式宣告 void fuc int a 10 函式呼叫 fuc array 在函式fuc中,a是二維陣列。使用a i j 形式來訪問陣列中元素。2 引數使用一維指標陣列...

C 二維陣列作函式引數

變數在作用域裡面被宣告的是什麼型別,就當作什麼型別來用。1 引數是二維陣列,但是要指定第二維的維數。int array 10 10 函式宣告 void fuc int a 10 函式呼叫 fuc array 在函式fuc中,a是二維陣列。使用a i j 形式來訪問陣列中元素。2 引數使用一維指標陣列...