看到很多人學習c和c++時,都在指標這裡有點問題,所以本人總結了一些個人理解,希望能夠幫助有疑惑的同學們
本來有圖和**,但找不到了,所以把文字的東西整上來了
指標不是打針,大家不要害怕
指標是什麼東西?位址????
指標就是乙個變數,值是位址,可以運算,(+ - * / < > (有些演算法沒有意義)),與一般變數有點區別(漢語裡,近意詞)
指標有什麼用?
指標就是訪問一塊區域的另一種途徑,(把指標當成指路標),同乙個區域可以有多個指標指向,通過任意乙個指標都 可以訪問這個塊區域
指標定義:
型別 *指標名;//在定義時用星表示這個變數 是個指標(在定義時,這個星除了說明這個變數 是指標,沒有其他作用),定義完以後,如果 用這個星,就表示取得指標指向的變數(*指標名 就是指向的變數),不用星就是指標
跟陣列相似,,在定義時,裡放的是長度,但是定義 完後,再用,裡面就是下標
指標的大小 :
指標在32位系統下是4個位元組,什麼型別的指標都是4個位元組,(void*也是4個位元組),指標都 是4個位元組,在定義指標時,要加個型別呢????指標的型別就是告訴編譯器,我要指向至少多大的記憶體,還有就是在指標計算時,(+-)char*p;p+1;//加減1時移動1個型別的大小,(void*加減1移動幾個位元組???1個位元組,如果 是自定義型別加減1sizeof(自定義型別))
指標的使用:
最常 用在函式的引數裡,可以修改實參,形參不能修改實參
在指標初始化時,賦值是給指標賦值,不是給*指標名 賦值,原因是,在定義指標時,星只表示 這個變數是指標
二級指標等多級指標:
什麼 是二級指標???
指向一級指標 的指標就是二指標
int a;
int* p1 = &a;
int* p2 = p1;//p2就一級指標,
int**pp = &p1;//兩個星才是二級指標
低階指標給高階指標賦值要用取位址,同級不用取位址,而叫賦值
二級指標有什麼 作用???
二級指標作用一,修改指向的一級指標的值(一級指標的指向)
特殊指標:
const int* p;//const *p//通過*p的方式不能修改變數的值
int const* p;//const *p//同上
int* const p;//*const p//指標的指向不能改變
助記方式:把型別去掉,看const後面是什麼 ,是*p表示不能通過*p的方式改變變數的值,如果是p,表示p的指向不能改變
#define pint int*
typedef int* pint;
//巨集,只是簡單的替換
//typedef 給乙個型別起個別名(重點是型別)
pint p1,p2;//int *p1,p2;//p1是指標,p2是變數
pint p3,p4;//int *p1,*p2;//p1,p2都是指標
指標陣列:(重點是陣列)
陣列的每個元素都是乙個指標
型別* 陣列名[長度];
陣列指標:(重點是指標)
型別 (*陣列名)[長度];//陣列指標指向的陣列的長度必須要一樣
函式指標:
函式指標就是乙個指標,只是型別是乙個函式,問題?函式也有型別???
函式也有型別,返回型別與引數列表決定函式的型別(引數列表包括型別,個數,順序)
int abc(int ,char);//abc是:返回型別為int,引數為int,char的型別
int cab(char ,int);//cba是:返回型別為int,引數為char,int的型別,(abc與cba不是同乙個型別)
函式指標的定義:
int *abc(char);//返回型別為int*的,引數為char的函式
int(*abc)(char);//這個才是函式指標的定義
typedef int (*pfunc)(char);
表示,pfunc就是乙個返回型別為int,引數為char的函式型別的別名
pfunc是乙個型別了,就可以定義變數了,如是定義 變數 ,那這變數 就是pfunc的型別
1,void* abc(int i,void*(*pfunc)(void*));
2,typedef void*(*pfunc)(void*);
3,void* abc(int i,pfunc pf);
2,3組合,與1相同
int* abc()
//問題,不能返回 指向區域性變數的指標(而不是區域性指標變數),但可以返回指向堆,或者靜態,或者生命週期長的變數
陣列名不是指標
from 引言 指標是c c 語言的特色,而陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式 設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 很幸運,我的大學老師就是其中之一。時至今日,我日復一日地進行著c c 專案的...
intptr t 其實不是指標型別
最近在看nginx原始碼,看到有乙個型別intptr t,沒有見過,google了一下,有人說是指標型別,但是看nginx原始碼中對該型別變數的使用,好像不是指標型別。cpp view plain copy static ngx int t 667 ngx get options int argc,...
php 引用不是指標
指標會存放位址值 引用僅僅是乙個標識 b 3 b 就是 globals b 的引用,相當於是 b globals b class foo obj new foo myvalue obj getvalue myvalue is a reference to obj value,which is 42....