當年這裡學得亂七八糟,現在需要反覆康康,遇到問題就會補進來噢。
// 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++
)/ 6 // 先取ptr所指位址儲存的值6,再將ptr指標後移兩單元,指向arr[1]
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 郝斌老師說過 指標就是位址,位址就是指標 位址就是記憶體單元的編號 指標變數是存放位址的變數 指標...