1.為什麼傳引用比傳指標安全
由於不存在空引用,並且引用一旦初始化為指向乙個物件,他就不能被改變為另乙個物件。因此引用安全。
2.複雜指標
2.1乙個有10個指標的陣列,該指標是指向乙個int型的: int* a[10]
2.2乙個指向有10個整形數陣列的指標: int(*a)[10]
2.3乙個指向函式的指標,該函式有乙個整形引數並返回乙個整形數: int(*a)(int)
2.4乙個有10個指標的陣列,該指標指向乙個函式,該函式有乙個整形引數並返回乙個整形數:int (*a[10])(int)
2.5int (*(*func)[5])(int *p) : func被乙個圓括號包含,左邊有乙個 * 號,所以func是乙個指標。跳出括號,右邊是乙個運算符號,說明func是乙個指向陣列的指標。在往左看,左邊有乙個 * 號,說明這個陣列的元素是指標;再跳出括號,右邊又有乙個括號,說明這個陣列的元素是指向函式的指標。
總結,func是乙個指向陣列的指標,這個陣列的元素是函式指標,這些指標指向具有int * 型別的形參,返回值為int型的函式
2.6int(*( * func)(int * p)[5] :func 是乙個函式指標,這類函式具有int * 型別的形參,返回值是指向陣列的指標,所指向的陣列的元素是具有5個int元素的陣列
2.7總結:使用右左法則:首先從最裡面的圓括號看起,然後往右看,在往左看。每當遇到圓括號,就應該掉轉閱讀方向。一旦解析圓括號裡的所有東西,就跳出圓括號。
3.指標加減
int main()
; int *ptr=(int *)(&a+1);
printf("%d\n",*(a+1));
printf("%d\n",*(ptr-1));
}
4.指標比較
int main()
{ char str1="abc";
char str2="abc";
const char str3="abc";
const char str4="abc";
const char* str5="abc";
const char* str6="abc";
char* str7="abc";
char* str8="abc";
cout <<(str1==str2)《陣列str1、str2、str3、str4都是在棧中分配的,記憶體中的內容相同,但是位置不同
指標str5、str6、str7、str8也是在棧中分配的,但是他們指向的「abc」儲存在資料區。所以這四個指標指向同一塊資料區的記憶體。
所以結果是
00111
5、指標常量與常量指標
6、this指標
c 學習筆記 指標和引用
指標和引用的區別 1 引用是乙個變數的別名,本身不單獨分配自己的記憶體空間,跟原來變數共享記憶體空間 而指標需要重新分配自己的記憶體空間,用來儲存指向物件的位址。2 引用訪問乙個變數是直接訪問,而指標是間接訪問。3 引用一經初始化就繫結到乙個記憶體空間,且只能是這個記憶體空間的名字,定義時必須初始化...
引用和指標筆記
指標和引用 1.區分定義和作為形參的意義 定義 int p 定義了乙個指標變數p 而不是指標變數 p 做形參 void f int p 要求使用整型的指標變數來作為形式引數,正常傳入時直接用指標變數即可,加上 後表示的是乙個整型數,帶入程式則會報錯 而引用,就是給同乙個位址賦予了新的名字,讓一塊空間...
C 面試筆記 指標和引用
includeusing namespace std void swap1 int p,int q void swap2 int p,int q void swap3 int p,int q void swap4 int p,int q void swap5 int p,int q intmain ...