C++指針

[b][color=red]一、變量與內存[/color][/b]

內存的最小單元是字節(8位),每個變量都有一個地址,變量int的內存大小是4個字節。

[quote]int a = 10;
int* pa= &a;[/quote]
定義一個變量pa,類型爲int*,初始值爲&a;稱int*爲指針類型,pa指向了一個int型變量,pa爲指針類型的變量(簡稱“指針”)

*pa = 8;(*pa讀寫內存地址的值)

[b][color=red]二、指針和數組[/color][/b]

數組可以看成一塊內存,數組名就是內存的地址(首地址),然後通過指針訪問。

[quote]int* p = arr;相當於int* p = &arr[0];[/quote]

p += 1;後移1個元素,取arr[1]的值。
[quote]p = arr + 3 (p = &arr[3]),[/quote]表示p指向arr數組的第四個元素。


[b][color=red]三、指針作爲函數的參數[/color][/b]

1、傳遞指針作爲參數
[quote]void test(int* p);[/quote]
調用:int a = 0; test(&a);


2、傳遞數組作爲參數,需要傳遞首地址和長度。

[quote]void max_min(int* p,int len,int* pmax,int* pmin)
{
int _max=p[0];int _min=p[0];
for(int i=1;i<len;i++)
{if(p[i]>_max) _max=p[i]; if (p[i]<_min) _min=p[i];}
[color=blue][b]*pmax[/b][/color] = _max; [color=blue][b]*pmin [/b][/color]= _min;
}[/quote]

3、把指針傳給函數有什麼作用?
1)效率問題:傳值與傳地址。
2)返回多個值:函數返回多個值,必須使用指針參數。
注:int avg(int* p,int len)等同於 int avg(int p[],int len);


4、const指針

指定的內存只能讀,不能寫。
int test(const int* p,int len)


[color=red][b]四、何安全使用指針[/b][/color]

用指針的時候要清楚1)指向變量、數組、指向零;2)是否失效、越界。3)空指針和野指針。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章