<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > Linux C - C基礎篇七(指針高級用法)

Linux C - C基礎篇七(指針高級用法)

發(fā)布人:嵌入式Linux 時(shí)間:2023-01-12 來(lái)源:工程師 發(fā)布文章
指針與結構體

先簡(jiǎn)單介紹下結構體

C語(yǔ)言中結構體(Struct)從本質(zhì)上講是一種自定義的數據類(lèi)型,只不過(guò)這種數據類(lèi)型比較復雜,是由 int、char、float 等基本類(lèi)型組成的。由于結構體將一組相關(guān)的變量看作一個(gè)整體而不是各自獨立的實(shí)體,因此結構體有助于組織復雜的數據,特別是在大型的程序中,結構體非常常見(jiàn)。聲明一個(gè)結構體的方式如下:

struct student {

char name[16];

int age;

int score;

};

如下,定義一個(gè)結構體變量,并通過(guò)"結構體變量名字.成員名字"的方式訪(fǎng)問(wèn)結構體變量里面的成員:

struct student stu;

stu.name = "張三";

stu.age = 15;

int a = stu.score;

結構體指針變量:結構體指針變量是指向結構體的指針,以上面的結構體為例,可以這樣定義如下的結構指針變量:

struct student *stu1;

訪(fǎng)問(wèn)指針變量里面的成員,我們通常使用->,如下:

stu1->age = 15;

但是上面的操作是錯誤的,因為stu1是結構體指針變量,并沒(méi)有指向某一塊地址,也就是我們所謂的野指針,那么直接訪(fǎng)問(wèn)它是會(huì )導致段錯誤的,正確的做法是給這個(gè)指針變量賦值,讓它指向另一個(gè)同類(lèi)型的結構體地址:

stu1 = &stu; //stu是我們在上面定義的結構體變量,加上&表示取地址

stu1->age = 15;

或者通過(guò)調用庫函數malloc申請一塊大小為對應結構體大小的內存地址,賦值給結構體指針變量,然后就可以給結構體指針變量所指向的內存地址賦值:

stu1 = malloc(sizeof(struct strudent));

stu1->age = 15;

這種用法在內核代碼中非常常見(jiàn)(Linux內核中使用kmalloc申請內存):

指針與函數

指針函數

指針函數本質(zhì)是一個(gè)函數,只不過(guò)它的返回值是一個(gè)地址(指針),當我們調用這些函數的時(shí)候需要用同類(lèi)型的指針變量來(lái)接收。例如:

char * strcpy(char *dest, const char *src);

int *func(int x,int y);

void *malloc(size_t size);

int *a = func(3, 5);

函數指針

函數指針本質(zhì)是一個(gè)指針變量,只不過(guò)它指向的類(lèi)型是一個(gè)函數,那么這個(gè)變量只能被一個(gè)函數賦值。如下,這種用法在內核中非常常見(jiàn):

在結構體中定義函數指針:

給函數指針賦值:

總結:

關(guān)于指針的應用在Linux中無(wú)論是應用層代碼中還是kernel內核代碼中應用都是非常普遍的,深入的理解指針不經(jīng)能使自己寫(xiě)出高效的代碼,更能讓你非常容易的讀懂大型項目中的代碼。


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。

汽車(chē)防盜機相關(guān)文章:汽車(chē)防盜機原理
燃氣報警器相關(guān)文章:燃氣報警器原理


關(guān)鍵詞: 指針

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>