一維陣列:
1 #include 2using
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 2using
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 2C 二維陣列作函式引數
變數在作用域裡面被宣告的是什麼型別,就當作什麼型別來用。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 引數使用一維指標陣列...