拿出小本本記一下C 指標和引用的混淆點

2021-10-05 18:47:45 字數 2005 閱讀 3397

當年這裡學得亂七八糟,現在需要反覆康康,遇到問題就會補進來噢。

// int* ptr = arr;  等價於 int*ptr = &arr[0]; 

// int ar = &arr[1]; 將arr[1]的位址,賦值給ar,即 &ar[0] = &arr[1], ar以arr[1]為首位址

void

fun(

int* ptr,

int ar,

int val)

intmain()

;fun

(arr,

&arr[1]

, arr[2]

);printf

("%d%d%d"

,arr[0]

,arr[1]

,arr[2]

);}// 輸出 3 3 0

int arr=

;int

* ptr;

ptr=arr;

// ptr指向arr首位址 arr[0]

//eg1

cout<<

*(ptr+2)

;// 8 // 選擇ptr指標所指位址後面2單元的位址,即arr[2],再取其值 8

*(ptr+2)

+=2;

// 更改 ptr指標所指位址後面2單元的位址 所存元素的值,再改變此值 8+2

printf

("%d,%d "

,*ptr,

*(ptr+2)

);// 6 10 // ptr本身的指向沒變,仍指向arr[0]

//eg2

cout<<

*(ptr++

)

cout<<

*ptr<*(ptr+2)

+=2;

// 更改 ptr指標所指位址後面2單元的位址 所存元素的值,再改變此值9+2

printf

("%d,%d "

,*ptr,

*(ptr+2)

);// 12 11

// 初始ptr指向arr[0],在第9行移動後指向arr[1],ptr在11行指向不動--arr[1],只更改了arr[3]的值

指標

引用指標是具體變數,需要占用儲存空間。

引用只是別名,不占用具體儲存空間,只有宣告沒有定義

sizeof() 是指標的大小,=4

sizeof() 是被引用物件的大小

指標宣告和定義可以分開,可以先只宣告指標變數而不初始化,等用到時再指向具體變數。可以被初始化為null

引用在宣告時必須初始化為另一變數,必須有具體實體

指標變數可以重新指向別的變數。

引用一旦初始化之後就不可以再改變(變數可以被引用為多次,但引用只能作為乙個變數引用)

作為引數傳遞,指標需要被解引用才可以對物件進行操作

作為引數傳遞,直接對引用的修改會改變引用所指向的物件

有const指標,指標可以有多級

沒有const引用,且引用只有一級

使用++運算子的意義不一樣

返回動態記憶體分配的物件or記憶體,必須使用指標

若使用引用,可能引起記憶體洩漏

int

*p[10

]int

(*p)[10

]int*p

(int

)int

(*p)

(int

)

int (*p)(int)是函式指標,強調是指標,該指標指向的函式具有int型別引數,並且返回值是int型別的。

產生原因及解決辦法:

在寫鍊錶或者二叉樹的時候,避免不了會用到指標or引用,來康康吧~

struct node };

int main (

)

請說一下C C 中指標和引用的區別?

1.指標有自己的一塊空間,指標是乙個變數,只不過這個變數儲存的是乙個位址,指向記憶體的乙個儲存單元,即指標是乙個實體。而引用只是乙個別名 2.使用sizeof看乙個指標的大小是4,而引用則是被引用物件的大小 3.指標可以被初始化為null,而引用必須被初始化且必須是乙個已有物件 的引用 4.作為引數...

簡述一下二級指標以及指標的引用在結構體中用法

我一下討論的都是在不用return把值進行返回的情況,也就是說用指標的情況。很簡單就是指標和引用,引用在新版本的c裡面也有包含,可以使用。系統xp ide用的 vc6.0 要把乙個值通過呼叫函式改變,可以用指標和引用,這個值可以是int int char char 或者說是結構體,結構體也有不同的情...

聊一下關於C語言多級指標的問題

c語言中的指標,是c語言的靈魂。也是c語言的難點!無數小白被指標摧殘。那麼指標到底是個啥?在這裡聊聊我對指標的理解 我們先來看一段 這裡我引用郝斌老師的一段 include int main void 郝斌老師說過 指標就是位址,位址就是指標 位址就是記憶體單元的編號 指標變數是存放位址的變數 指標...