c++還是比較難的。。。如果有理解錯誤,請一定不吝賜教。
指標其實就是乙個變數,只不過它儲存的是乙個位址,
其實我個人感覺真正彆扭的是,定義q的時候常規思路上是 *q = &a ,q應該是a的位址,但是實際上儲存位址的是變數q, 而q是索引位址所代表的值的。明白這一點,指標就應該沒大問題了。
int a =10;
int* q =
&a;// 列印q 與*q
cout << q << endl;
// 0x61fe14
cout <<
*q << endl;
// 10
這裡面個人感覺主要是看const的位置
第一種情況:
修飾整個int指標,那麼這個指標索引到的值,在指標儲存的位址不變時,不可發生改變,但是當你給它賦新的位址時,也可以順便修改指標位址所索引的值。
int a =10;
const
int* q =
&a;// 這裡修飾的是整個int型的指標
**黑馬程式設計師
那麼這種情況有啥用呢,當你傳入訊息時,如果只是用值傳遞,那麼會產生拷貝現象,會占用大量資源,那麼我們進行函式運算的時候,考慮使用位址傳入,但是位址傳入的時候,會修改位址所索引的值,那麼使用const int * q,這樣的傳入,即滿足了位址傳遞的效果,又不會使原資料進行修改,就滿足了需求。
那有意思的來了,如果在函式裡面,進行位址重新指向,原有的值會發生改變麼?
下面我們發現在函式中修改了,指標的索引,卻並沒有使主函式中的值有更改。
void
test
(const
int*q)
intmain()
// 輸出
1020
void
test
(int
**q)
intmain()
{int a =10;
int*q =
&a;int
**q1 =
&q;test
(q1)
; cout << a << endl;
cout <<
*q << endl;
int b =20;
q =&b; cout <<
*q << endl;
int a =10;
int b =20;
int*
const p;
// 指標常量
// p = &b;
*p =
20;
引用的實質就是就是上述指標的第二種情況。
int a =10;
int&c = a;
c =20
;//c = &b;
當我們將const 新增到引用之前,就是防止誤操作,
const
int& a;
const
int*
const a;
C 指標與引用
include 引用傳遞 int add1 int x,int y 指標傳遞 int add2 int x,int y 值傳遞 int add3 int x,int y void main int a 1 int b a 引用,表示b的引用指向了a 定義引用 開頭 必須賦初值 引用變數不占用記憶體 ...
C 指標與引用
從函式引數傳遞說起 int addition int x,int y int main void duplicate int a,int b int main 按值傳遞,顧名思義,函式形參僅僅得到變數傳來的值,函式的任何操作並不對變數產生任何變化 按位址傳遞,他的定義方式與按值傳遞不一樣 注意其在m...
C 引用與指標
1 引用即給當前物件起了個別名,通過將宣告符寫成 t c的形式來定義引用,其中t是變數名,c是當前物件的名字 修改別名相當於修改當前物件,引用必須初始化,且不能更改指向物件 example int a 10 定義a及初始化 int c a 定義a的引用c cout2 引用不是物件,只是對目前已經存在...