指標不是打針

2021-06-18 15:23:44 字數 2238 閱讀 3985

看到很多人學習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....