C 筆記 引用和指標

2021-09-11 07:17:31 字數 1451 閱讀 9934

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 ...