0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言指針詳解

GReq_mcu168 ? 來(lái)源:玩轉(zhuǎn)單片機(jī) ? 2020-08-05 10:17 ? 次閱讀

1為什么使用指針

假如我們定義了 char a=’A’ ,當(dāng)需要使用 ‘A’ 時(shí),除了直接調(diào)用變量 a ,還可以定義 char *p=&a ,調(diào)用 a 的地址,即指向 a 的指針 p ,變量 a( char 類型)只占了一個(gè)字節(jié),指針本身的大小由可尋址的字長(zhǎng)來(lái)決定,指針 p 占用 4 個(gè)字節(jié)。

但如果要引用的是占用內(nèi)存空間比較大東西,用指針也還是 4 個(gè)字節(jié)即可。

使用指針型變量在很多時(shí)候占用更小的內(nèi)存空間。

變量為了表示數(shù)據(jù),指針可以更好的傳遞數(shù)據(jù),舉個(gè)例子:

第一節(jié)課是 1 班語(yǔ)文, 2 班數(shù)學(xué),第二節(jié)課顛倒過(guò)來(lái), 1 班要上數(shù)學(xué), 2 班要上語(yǔ)文,那么第一節(jié)課下課后需要怎樣作調(diào)整呢?方案一:課間 1 班學(xué)生全都去 2 班, 2 班學(xué)生全都來(lái) 1 班,當(dāng)然,走的時(shí)候要攜帶上書本、筆紙、零食……場(chǎng)面一片狼藉;方案二:兩位老師課間互換教室。

顯然,方案二更好一些,方案二類似使用指針傳遞地址,方案一將內(nèi)存中的內(nèi)容重新“復(fù)制”了一份,效率比較低。

在數(shù)據(jù)傳遞時(shí),如果數(shù)據(jù)塊較大,可以使用指針傳遞地址而不是實(shí)際數(shù)據(jù),即提高傳輸速度,又節(jié)省大量?jī)?nèi)存。

一個(gè)數(shù)據(jù)緩沖區(qū) char buf[100] ,如果其中 buf[0,1] 為命令號(hào), buf[2,3] 為數(shù)據(jù)類型, buf[4~7] 為該類型的數(shù)值,類型為 int ,使用如下語(yǔ)句進(jìn)行賦值:

*(short*)&buf[0]=DataId; *(short*)&buf[2]=DataType; *(int*)&buf[4]=DataValue;

數(shù)據(jù)轉(zhuǎn)換,利用指針的靈活的類型轉(zhuǎn)換,可以用來(lái)做數(shù)據(jù)類型轉(zhuǎn)換,比較常用于通訊緩沖區(qū)的填充。

指針的機(jī)制比較簡(jiǎn)單,其功能可以被集中重新實(shí)現(xiàn)成更抽象化的引用數(shù)據(jù)形式

函數(shù)指針,形如: #define PMYFUN (void*)(int,int) ,可以用在大量分支處理的實(shí)例當(dāng)中,如某通訊根據(jù)不同的命令號(hào)執(zhí)行不同類型的命令,則可以建立一個(gè)函數(shù)指針數(shù)組,進(jìn)行散轉(zhuǎn)。

在數(shù)據(jù)結(jié)構(gòu)中,鏈表、樹、圖等大量的應(yīng)用都離不開指針。

2 指針是什么?

操作系統(tǒng)硬件和軟件結(jié)合起來(lái),給程序員提供的一種對(duì)內(nèi)存使用的抽象,這種抽象機(jī)制使得程序使用的是虛擬存儲(chǔ)器,而不是直接操作和使用真實(shí)存在的物理存儲(chǔ)器。所有的虛擬地址形成的集合就是虛擬地址空間。

內(nèi)存是一個(gè)很大的線性的字節(jié)數(shù)組,每個(gè)字節(jié)固定由 8 個(gè)二進(jìn)制位組成,每個(gè)字節(jié)都有唯一的編號(hào),如下圖,這是一個(gè) 4G 的內(nèi)存,他一共有 4x1024x1024x1024 = 4294967296 個(gè)字節(jié),那么它的地址范圍就是 0 ~ 4294967296 ,十六進(jìn)制表示就是 0x00000000~0xffffffff ,當(dāng)程序使用的數(shù)據(jù)載入內(nèi)存時(shí),都有自己唯一的一個(gè)編號(hào),這個(gè)編號(hào)就是這個(gè)數(shù)據(jù)的地址。指針就是這樣形成的。

1

#include intmain(void) { charch='a'; intnum=97; printf("ch的地址:%p ",&ch); //ch的地址:00BEFDF7 printf("num的地址:%p ",&num); //num的地址:00BEFDF8 return0; }

指針不僅可以表示變量的地址,還可以存儲(chǔ)各種類型數(shù)據(jù)的地址,指針變量是用來(lái)保存這些地址的變量,與數(shù)組類似,依據(jù)地址存放的數(shù)據(jù)類型,指針也分為 int 指針類型, double 指針類型, char 指針類型等等。

綜上,指針的實(shí)質(zhì)就是數(shù)據(jù)在內(nèi)存中的地址,而指針變量是用來(lái)保存這些地址的變量。

指針變量 和 指向關(guān)系

用來(lái)保存 指針 的變量,就是指針變量。如果指針變量p保存了變量 num的地址,則就說(shuō):p指向了變量num,也可以說(shuō)p指向了num所在的內(nèi)存塊,指針變量pp指向了p所在的內(nèi)存塊,以下面為例:

#include intmain(void) { intnum=97; charch='a'; int*p=# int**pp=&p; char*p1=&ch; printf("num的地址:%p ",&num); printf("指針p的值:%p ",p); printf("指針p的地址:%p ",&p); printf("指針pp的值:%p ",pp); printf("ch的地址:%p ",&ch); return0; }

運(yùn)行結(jié)果

int型的num值為97占4個(gè)字節(jié),內(nèi)存地址為:0113F924,char 型的ch('a')值為97占1個(gè)字節(jié),內(nèi)存地址為:0113F91B。

int型占4個(gè)字節(jié)

char型占1個(gè)字節(jié)

num的地址為:0113F924,num的值為 97 ,指針 p 指向 num 的內(nèi)存塊,指針 p 地址為:0113F90C,p的內(nèi)存保存的值就是num的地址0113F924。

0x0113F90C存儲(chǔ)的內(nèi)容為地址0113F924

指針變量 pp 指向 指針 p,指針 pp 內(nèi)存值為 指針 p 的地址:0113F90C,形成了只想指針的指針。

指針pp為指向指針p的指針

定義指針變量

C語(yǔ)言中,定義變量時(shí),在變量名 前 寫一個(gè) * 星號(hào),這個(gè)變量就變成了對(duì)應(yīng)變量類型的指針變量。必要時(shí)要加( ) 來(lái)避免優(yōu)先級(jí)的問(wèn)題。

引申:C語(yǔ)言中,定義變量時(shí),在定義的最前面寫上typedef ,那么這個(gè)變量名就成了一種類型,即這個(gè)類型的同義詞。

inta;//int類型變量a int*a;//int*變量a intarr[3];//arr是包含3個(gè)int元素的數(shù)組 int(*arr)[3];//arr是一個(gè)指向包含3個(gè)int元素的數(shù)組的指針變量 int*p_int;//指向int類型變量的指針 double*p_double;//指向idouble類型變量的指針 structStudent*p_struct;//結(jié)構(gòu)體類型的指針 int(*p_func)(int,int);//指向返回類型為int,有2個(gè)int形參的函數(shù)的指針 int(*p_arr)[3];//指向含有3個(gè)int元素的數(shù)組的指針 int**p_pointer;//指向一個(gè)整形變量指針的指針

取地址

既然有了指針變量,那就得讓他保存其它變量的地址,使用& 運(yùn)算符取得一個(gè)變量的地址。

intadd(inta,intb) { returna+b; } intmain(void) { intnum=97; floatscore=10.00F; intarr[3]={1,2,3}; int*p_num=# float*p_score=&score; int(*p_arr)[3]=&arr; int(*fp_add)(int,int)=add;//p_add是指向函數(shù)add的函數(shù)指針 return0; }

特殊的情況,他們并不一定需要使用&取地址:

數(shù)組名的值就是這個(gè)數(shù)組的第一個(gè)元素的地址。

函數(shù)名的值就是這個(gè)函數(shù)的地址。

字符串字面值常量作為右值時(shí),就是這個(gè)字符串對(duì)應(yīng)的字符數(shù)組的名稱,也就是這個(gè)字符串在內(nèi)存中的地址。

intadd(inta,intb){ returna+b; } intmain(void) { intarr[3]={1,2,3}; int*p_first=arr; int(*fp_add)(int,int)=add; constchar*msg="Helloworld"; return0; }

解地址

對(duì)一個(gè)指針解地址,就可以取到這個(gè)內(nèi)存數(shù)據(jù),解地址 的寫法,就是在指針的前面加一個(gè) * 號(hào)。

解指針的實(shí)質(zhì)是:從指針指向的內(nèi)存塊中取出這個(gè)內(nèi)存數(shù)據(jù)。

intmain(void) { intage=19; int*p_age=&age; *p_age=20;//通過(guò)指針修改指向的內(nèi)存數(shù)據(jù) printf("age=%d",*p_age);//通過(guò)指針讀取指向的內(nèi)存數(shù)據(jù) printf("age=%d",age); return0; }

空指針

空指針在概念上不同于未初始化的指針??罩羔樋梢源_保不指向任何對(duì)象或函數(shù);而未初始化的指針則可能指向任何地方??罩羔槻皇且爸羔?。

在C語(yǔ)言中,我們讓指針變量賦值為NULL表示一個(gè)空指針,而C語(yǔ)言中,NULL實(shí)質(zhì)是 ((void*)0) , 在C++中,NULL實(shí)質(zhì)是0。

#ifdef__cplusplus #defineNULL0 #else #defineNULL((void*)0) #endif

void*類型指針

void是一種特殊的指針類型,可以用來(lái)存放任意對(duì)象的地址。一個(gè)void指針存放著一個(gè)地址,這一點(diǎn)和其他指針類似。不同的是,我們對(duì)它到底儲(chǔ)存的是什么對(duì)象的地址并不了解。

doublea=2.3; intb=5; void*p=&a; cout<

由于void是空類型,只保存了指針的值,而丟失了類型信息,我們不知道他指向的數(shù)據(jù)是什么類型的,只指定這個(gè)數(shù)據(jù)在內(nèi)存中的起始地址,如果想要完整的提取指向的數(shù)據(jù),程序員就必須對(duì)這個(gè)指針做出正確的類型轉(zhuǎn)換,然后再解指針。

數(shù)組和指針

同類型指針變量可以相互賦值,數(shù)組不行,只能一個(gè)一個(gè)元素的賦值或拷貝

數(shù)組在內(nèi)存中是連續(xù)存放的,開辟一塊連續(xù)的內(nèi)存空間。數(shù)組是根據(jù)數(shù)組的下進(jìn)行訪問(wèn)的。指針很靈活,它可以指向任意類型的數(shù)據(jù)。指針的類型說(shuō)明了它所指向地址空間的內(nèi)存。

數(shù)組所占存儲(chǔ)空間的內(nèi)存:sizeof(數(shù)組名) 數(shù)組的大?。簊izeof(數(shù)組名)/sizeof(數(shù)據(jù)類型),在32位平臺(tái)下,無(wú)論指針的類型是什么,sizeof(指針名)都是 4 ,在 64 位平臺(tái)下,無(wú)論指針的類型是什么,sizeof(指針名)都是 8 。

數(shù)組名作為右值的時(shí)候,就是第一個(gè)元素的地址

intmain(void) { intarr[5]={1,2,3,4,5}; int*p_first=arr; printf("%d",*p_first);//1 return0; }

指向數(shù)組元素的指針 支持 遞增 遞減 運(yùn)算。p= p+1意思是,讓p指向原來(lái)指向的內(nèi)存塊的下一個(gè)相鄰的相同類型的內(nèi)存塊。在數(shù)組中相鄰內(nèi)存就是相鄰下標(biāo)元素。

函數(shù)與指針

函數(shù)的參數(shù)和指針

C語(yǔ)言中,實(shí)參傳遞給形參,是按值傳遞的,也就是說(shuō),函數(shù)中的形參是實(shí)參的拷貝份,形參和實(shí)參只是在值上面一樣,而不是同一個(gè)內(nèi)存數(shù)據(jù)對(duì)象。這就意味著:這種數(shù)據(jù)傳遞是單向的,即從調(diào)用者傳遞給被調(diào)函數(shù),而被調(diào)函數(shù)無(wú)法修改傳遞的參數(shù)達(dá)到回傳的效果。

voidchange(inta) { a++;//在函數(shù)中改變的只是這個(gè)函數(shù)的局部變量a,而隨著函數(shù)執(zhí)行結(jié)束,a被銷毀。age還是原來(lái)的age,紋絲不動(dòng)。 } intmain(void) { intage=60; change(age); printf("age=%d",age);//age=60 return0; }

有時(shí)候我們可以使用函數(shù)的返回值來(lái)回傳數(shù)據(jù),在簡(jiǎn)單的情況下是可以的,但是如果返回值有其它用途(例如返回函數(shù)的執(zhí)行狀態(tài)量),或者要回傳的數(shù)據(jù)不止一個(gè),返回值就解決不了了。

傳遞變量的指針可以輕松解決上述問(wèn)題。

voidchange(int*pa) { (*pa)++;//因?yàn)閭鬟f的是age的地址,因此pa指向內(nèi)存數(shù)據(jù)age。當(dāng)在函數(shù)中對(duì)指針pa解地址時(shí), //會(huì)直接去內(nèi)存中找到age這個(gè)數(shù)據(jù),然后把它增1。 } intmain(void) { intage=160; change(&age); printf("age=%d",age);//age=61 return0; }

比如指針的一個(gè)常見的使用例子:

#include #include #include voidswap(int*,int*); intmain() { inta=5,b=10; printf("a=%d,b=%d ",a,b); swap(&a,&b); printf("a=%d,b=%d ",a,b); return0; } voidswap(int*pa,int*pb) { intt=*pa;*pa=*pb;*pb=t; }

在以上的例子中,swap函數(shù)的兩個(gè)形參pa和pb可以接收兩個(gè)整型變量的地址,并通過(guò)間接訪問(wèn)的方式修改了它指向變量的值。在main函數(shù)中調(diào)用swap時(shí),提供的實(shí)參分別為&a,&b,這樣就實(shí)現(xiàn)了pa=&a,pb=&b的賦值過(guò)程,這樣在swap函數(shù)中就通過(guò)*pa修改了 a 的值,通過(guò)*pb修改了 b 的值。因此,如果需要在被調(diào)函數(shù)中修改主調(diào)函數(shù)中變量的值,就需要經(jīng)過(guò)以下幾個(gè)步驟:

定義函數(shù)的形參必須為指針類型,以接收主調(diào)函數(shù)中傳來(lái)的變量的地址;

調(diào)用函數(shù)時(shí)實(shí)參為變量的地址;

在被調(diào)函數(shù)中使用*間接訪問(wèn)形參指向的內(nèi)存空間,實(shí)現(xiàn)修改主調(diào)函數(shù)中變量值的功能。

指針作為函數(shù)的形參的另一個(gè)典型應(yīng)用是當(dāng)函數(shù)有多個(gè)返回值的情形。比如,需要在一個(gè)函數(shù)中統(tǒng)計(jì)一個(gè)數(shù)組的最大值、最小值和平均值。當(dāng)然你可以編寫三個(gè)函數(shù)分別完成統(tǒng)計(jì)三個(gè)值的功能。但比較啰嗦,如:

intGetMax(inta[],intn) { intmax=a[0],i; for(i=1;ia[i])min=a[i]; } returnmin; } doubleGetAvg(inta[],intn) { doubleavg=0; inti; for(i=0;i

其實(shí)我們完全可以在一個(gè)函數(shù)中完成這個(gè)功能,由于函數(shù)只能有一個(gè)返回值,可以返回平均值,最大值和最小值可以通過(guò)指針類型的形參來(lái)進(jìn)行實(shí)現(xiàn):

doubleStat(inta[],intn,int*pmax,int*pmin) { doubleavg=a[0]; inti; *pmax=*pmin=a[0]; for(i=1;ia[i])*pmin=a[i]; } returnavg/n; }

函數(shù)的指針

一個(gè)函數(shù)總是占用一段連續(xù)的內(nèi)存區(qū)域,函數(shù)名在表達(dá)式中有時(shí)也會(huì)被轉(zhuǎn)換為該函數(shù)所在內(nèi)存區(qū)域的首地址。我們可以把函數(shù)的這個(gè)首地址賦予一個(gè)指針變量,使指針變量指向函數(shù)所在的內(nèi)存區(qū)域,然后通過(guò)指針變量就可以找到并調(diào)用該函數(shù)。這種指針就是函數(shù)指針。

函數(shù)指針的定義形式為:

returnType (*pointerName)(param list);

returnType 為函數(shù)返回值類型,pointerNmae 為指針名稱,param list 為函數(shù)參數(shù)列表。參數(shù)列表中可以同時(shí)給出參數(shù)的類型和名稱,也可以只給出參數(shù)的類型,省略參數(shù)的名稱,這一點(diǎn)和函數(shù)原型非常類似。

用指針來(lái)實(shí)現(xiàn)對(duì)函數(shù)的調(diào)用:

#include //返回兩個(gè)數(shù)中較大的一個(gè) intmax(inta,intb) { returna>b?a:b; } intmain() { intx,y,maxval; //定義函數(shù)指針 int(*pmax)(int,int)=max;//也可以寫作int(*pmax)(inta,intb) printf("Inputtwonumbers:"); scanf("%d%d",&x,&y); maxval=(*pmax)(x,y); printf("Maxvalue:%d ",maxval); return0; }

結(jié)構(gòu)體和指針

結(jié)構(gòu)體指針有特殊的語(yǔ)法:-> 符號(hào)

如果p是一個(gè)結(jié)構(gòu)體指針,則可以使用 p ->【成員】 的方法訪問(wèn)結(jié)構(gòu)體的成員

typedefstruct { charname[31]; intage; floatscore; }Student; intmain(void) { Studentstu={"Bob",19,98.0}; Student*ps=&stu; ps->age=20; ps->score=99.0; printf("name:%sage:%d ",ps->name,ps->age); return0; }

const 和 指針

指向常量的指針,值不能改變,指向可改變

常指針值能改變,指向不可改變

指向常量的常指針,都不能改變

#include intmain() { //1可改變指針 constinta=10; int*p=&a; *p=1000; printf("*p=%d ",*p); //2可改變指針 constb=10; int*pb=&b; pb=p; printf("*pb=%d ",*pb); //3 constc=10; int*constpc=&c; *pc=1000; //pc=pb;不能改變 //4 constd=10; const*intconstpd=&d; //*pd=1000;不能改變 printf(" "); return0; }

深拷貝和淺拷貝

如果2個(gè)程序單元(例如2個(gè)函數(shù))是通過(guò)拷貝 他們所共享的數(shù)據(jù)的 指針來(lái)工作的,這就是淺拷貝,因?yàn)檎嬲L問(wèn)的數(shù)據(jù)并沒有被拷貝。如果被訪問(wèn)的數(shù)據(jù)被拷貝了,在每個(gè)單元中都有自己的一份,對(duì)目標(biāo)數(shù)據(jù)的操作相互 不受影響,則叫做深拷貝。

#include usingnamespacestd; classCopyDemo { public: CopyDemo(intpa,char*cstr)//構(gòu)造函數(shù),兩個(gè)參數(shù) { this->a=pa; this->str=newchar[1024];//指針數(shù)組,動(dòng)態(tài)的用new在堆上分配存儲(chǔ)空間 strcpy(this->str,cstr);//拷貝過(guò)來(lái) } //沒寫,C++會(huì)自動(dòng)幫忙寫一個(gè)復(fù)制構(gòu)造函數(shù),淺拷貝只復(fù)制指針,如下注釋部分 //CopyDemo(CopyDemo&obj) //{ //this->a=obj.a; //this->str=obj.str;//這里是淺復(fù)制會(huì)出問(wèn)題,要深復(fù)制 //} CopyDemo(CopyDemo&obj)//一般數(shù)據(jù)成員有指針要自己寫復(fù)制構(gòu)造函數(shù),如下 { this->a=obj.a; //this->str=obj.str;//這里是淺復(fù)制會(huì)出問(wèn)題,要深復(fù)制 this->str=newchar[1024];//應(yīng)該這樣寫 if(str!=0) strcpy(this->str,obj.str);//如果成功,把內(nèi)容復(fù)制過(guò)來(lái) } ~CopyDemo()//析構(gòu)函數(shù) { deletestr; } public: inta;//定義一個(gè)整型的數(shù)據(jù)成員 char*str;//字符串指針 }; intmain() { CopyDemoA(100,"hello!!!"); CopyDemoB=A;//復(fù)制構(gòu)造函數(shù),把A的10和hello!!!復(fù)制給B cout<<"A:"<

根據(jù)上面實(shí)例可以看到,淺復(fù)制僅復(fù)制對(duì)象本身(其中包括是指針的成員),這樣不同被復(fù)制對(duì)象的成員中的對(duì)應(yīng)非空指針會(huì)指向同一對(duì)象,被成員指針引用的對(duì)象成為共享的,無(wú)法直接通過(guò)指針成員安全地刪除(因?yàn)槿糁苯觿h除,另外對(duì)象中的指針就會(huì)無(wú)效,形成所謂的野指針,而訪問(wèn)無(wú)效指針是危險(xiǎn)的;

除非這些指針有引用計(jì)數(shù)或者其它手段確保被指對(duì)象的所有權(quán));而深復(fù)制在淺復(fù)制的基礎(chǔ)上,連同指針指向的對(duì)象也一起復(fù)制,代價(jià)比較高,但是相對(duì)容易管理。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6715

    瀏覽量

    88316
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134153
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    607

    瀏覽量

    28257

原文標(biāo)題:C語(yǔ)言指針詳解

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言指針詳細(xì)解析

    可以對(duì)數(shù)據(jù)本身,也可以對(duì)存儲(chǔ)數(shù)據(jù)的變量地址進(jìn)行操作。 指針是一個(gè)占據(jù)存儲(chǔ)空間的實(shí)體在這一段空間起始位置的相對(duì)距離值。在C/C++語(yǔ)言中,指針
    發(fā)表于 09-14 10:03

    面試中的高頻問(wèn)題:指針函數(shù)與函數(shù)指針,你能完美應(yīng)對(duì)嗎?

    一直覺得C語(yǔ)言較其他語(yǔ)言最偉大的地方就是C語(yǔ)言中的指針,有些人認(rèn)為
    的頭像 發(fā)表于 06-22 08:11 ?912次閱讀
    面試中的高頻問(wèn)題:<b class='flag-5'>指針</b>函數(shù)與函數(shù)<b class='flag-5'>指針</b>,你能完美應(yīng)對(duì)嗎?

    Keil+C51中對(duì)雙數(shù)據(jù)指針的直接利用

    Keil+C51中對(duì)雙數(shù)據(jù)指針的直接利用
    發(fā)表于 06-18 10:15 ?0次下載

    提高C代碼可讀性的編寫技巧與策略

    指針C 語(yǔ)言的靈魂,是 C 比其他語(yǔ)言更靈活,更強(qiáng)大的地方。所以學(xué)習(xí) C
    發(fā)表于 04-23 18:25 ?346次閱讀

    C語(yǔ)言函數(shù)指針六大應(yīng)用場(chǎng)景詳解

    函數(shù)指針是一種非常強(qiáng)大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個(gè)函數(shù)指針的高級(jí)應(yīng)用場(chǎng)景,并貼出相應(yīng)的代碼案例和解釋。
    的頭像 發(fā)表于 04-23 18:19 ?729次閱讀

    C語(yǔ)言指針用法

    C語(yǔ)言編程中善用指針可以簡(jiǎn)化一些任務(wù)的處理,而對(duì)于一些任務(wù)(比如動(dòng)態(tài)內(nèi)存分配),必須要有指針才行的。也就是說(shuō)精通C
    發(fā)表于 03-05 14:22 ?257次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的<b class='flag-5'>指針</b>用法

    怎么寫出效率高、思路清晰的C語(yǔ)言程序?

    要用C語(yǔ)言的思維方式來(lái)進(jìn)行程序的構(gòu)架構(gòu)建 要有良好的C語(yǔ)言算法基礎(chǔ),以此來(lái)實(shí)現(xiàn)程序的邏輯構(gòu)架 靈活運(yùn)用C
    的頭像 發(fā)表于 01-02 14:20 ?441次閱讀

    c語(yǔ)言程序設(shè)計(jì)基礎(chǔ)知識(shí)點(diǎn)

    程序設(shè)計(jì)的基礎(chǔ)知識(shí)點(diǎn)。 首先,我們將從C語(yǔ)言的數(shù)據(jù)類型和變量開始。C語(yǔ)言提供了多種數(shù)據(jù)類型,包括整數(shù)、浮點(diǎn)數(shù)、字符和指針等。整數(shù)類型包括in
    的頭像 發(fā)表于 11-27 15:25 ?1338次閱讀

    嵌入式C語(yǔ)言的結(jié)構(gòu)特點(diǎn)

    過(guò)程中,不論是基于寄存器開發(fā)還是基于庫(kù)開發(fā),深入理解和掌握嵌入式C語(yǔ)言的函數(shù)、指針、結(jié)構(gòu)體是學(xué)習(xí)STM32的關(guān)鍵。嵌入式C語(yǔ)言的結(jié)構(gòu)特點(diǎn)如下
    的頭像 發(fā)表于 11-24 16:16 ?526次閱讀
    嵌入式<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的結(jié)構(gòu)特點(diǎn)

    C++智能指針的底層實(shí)現(xiàn)原理

    C++智能指針的頭文件: #include 1. shared_ptr: 智能指針從本質(zhì)上來(lái)說(shuō)是一個(gè)模板類,用類實(shí)現(xiàn)對(duì)指針對(duì)象的管理。 template class shared_pt
    的頭像 發(fā)表于 11-09 14:32 ?581次閱讀
    <b class='flag-5'>C</b>++智能<b class='flag-5'>指針</b>的底層實(shí)現(xiàn)原理

    淺談C語(yǔ)言面向?qū)ο缶幊趟枷?/a>

    C語(yǔ)言是一種面向過(guò)程的語(yǔ)言,但是也可以用結(jié)構(gòu)體和函數(shù)指針來(lái)模擬面向?qū)ο蟮奶匦?,比如封裝、繼承和多態(tài)。
    發(fā)表于 11-02 12:27 ?796次閱讀

    C語(yǔ)言中數(shù)字怎么轉(zhuǎn)成指針

    C語(yǔ)言中數(shù)字怎么轉(zhuǎn)成指針,比如我要去內(nèi)存地址為0x100的內(nèi)容,用一句話表達(dá),不如uchar a=?我要問(wèn)號(hào)等于0x100地址的內(nèi)容
    發(fā)表于 10-31 06:29

    單片機(jī)C語(yǔ)言指針有什么用處呢?

    單片機(jī)C語(yǔ)言指針有什么用處呢
    發(fā)表于 10-23 07:18

    C語(yǔ)言中的結(jié)構(gòu)體指針在訪問(wèn)的時(shí)候怎么讀取成員變量的數(shù)據(jù)?

    C語(yǔ)言中的結(jié)構(gòu)體指針在訪問(wèn)的時(shí)候怎么讀取成員變量的數(shù)據(jù)
    發(fā)表于 10-10 07:07

    C語(yǔ)言指針講解

      C語(yǔ)言可以說(shuō)是工科學(xué)生必不可少的編程語(yǔ)言了,尤其是嵌入式的應(yīng)用中C語(yǔ)言更是大廈之基,甚至在我的評(píng)價(jià)里他相比于數(shù)學(xué)對(duì)于工科生的作用等價(jià)。
    發(fā)表于 10-01 13:25 ?261次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>指針</b>講解