首先我們要知道,乙個記憶體單元由位址和內容兩部分組成。
如上圖,例如我們定義了乙個變數a.
通過取位址運算子&(他的作用是求乙個變數的位址),我們知道變數a的位址為0x6ffe1c,內容為5。
我們在訪問變數a時,通常是直接訪問,例如將a的值改為10,則直接執行a=10;
但是除了直接訪問以外,我們可以用一種間接訪問的方式來修改a的值。我們再另外定義乙個變數p,專門用來存放a的位址,p的存放內容就是a的位址,當然p本身也有乙個位址&p。然後我們再使用間接定址運算子 *p(他的作用是返回運算元所指定位址的變數的值)來訪問a的值,執行*p=10,也可以達到修改的目的。
我們這種用位址的方式來間接訪問乙個變數,用畫圖的形式來表示的話,一般用乙個箭頭從那個存放位址的變數指向這個真正要訪問的變數【如圖二的紅色箭頭】,因此指標由此生動的產生。乙個變數的位址就是該變數的指標。
總結:
指標就是乙個變數的位址,因為位址會指向這個變數,所以稱其為指標。
指標變數是乙個變數,專門用來存放變數的位址。
形式:基礎變數型別 * 指標變數名;
例如上圖的指標定義, int *p; 說明p是乙個指標,並且指向整型型別,要達到訪問a的目的,還需要進行賦值連線,即 p=&a;
也可以在定義是直接初始化: int *p=&a;
1.函式的引數可以是整型、實型、字元型等等,也可以是指標型別。
2.這種位址傳遞(也叫指標傳遞)的方式可以實現通過呼叫函式使變數的值發生變化,並且在主調函式中使用這些改變了的值。
經典例題:交換兩個數字
#includeusing namespace std;
void swap(int *a,int *b)
int main(){
int x=5,y=6;
swap(&x,&y);
cout實參傳入的是變數x,y的位址,形參的型別也是指標型別,他們接收了這個位址,現在指標變數a指向x,b指向y。
我們又定義了變數t,來交換*a和*b,也就是交換了x和y的值,實現了swap功能。
關於swap功能的實現還有很多種交換方式是不正確的,也是經典的例題。
c++實現swap功能的常見幾種錯誤【值傳遞、位址傳遞】
簡單題10000 未完成)
problem 簡單題10000 description 已知一排硬幣中有n個硬幣正面朝上,輸入正面朝上的硬幣的位置ai 可能重複 兩人輪流操作,每次操作可以翻轉1,2,或則3枚硬幣 不一定連續 其中翻轉的最右的硬幣必須是正面朝上的,最後不能翻轉的為負 input 第一行輸入乙個組數t t 100 ...
未完成的遊戲
半年前的某天,陽光穿過烏雲照射著滿是創痕的世界,我走在曾經熟悉的靜謐的寒冷的恐懼的街道。並沒有先前設想的那樣來一陣狂歡,大概是意識到了人生短暫,不應該花費過多精力在慶祝上。高考遠沒有預期的那樣滿意,不過我還是舒了一口氣,終於結束了。2015年的9月,寒雪社群掛上這樣一句話 由於種種原因,論壇暫時關閉...
未完成的工作
1 上下文不明確,需要明確重啟的場景,什麼情況下需要重啟?重啟是完成什麼功能的,配置生效?2 執行分析沒有串起來,從使用者下發重啟mml命令,到後台整個集群如何逐步完成重啟,操作結果如何展示給使用者 3 規格沒有明確,重啟多長時間完成?4 一些規格限制沒有明確,如mml必須先返回操作結果 5 異常場...