<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ā)布文章
概念

在C語(yǔ)言中,所有的變量都是存放在內存中,內存可以理解為一組有序字節組成的數組,每個(gè)字節都有唯一的地址。CPU通過(guò)內存尋址對存儲在內存中的數據對象的地址進(jìn)行定位,數據對象是指存儲在內存中的一個(gè)指定數據類(lèi)型的數值或字符串,它們都有一個(gè)自己的地址,而指針便是保存這個(gè)地址的變量。也就是說(shuō):指針其實(shí)是保存另一個(gè)變量的地址,我們能夠通過(guò)這個(gè)地址從而間接地操作這個(gè)變量。每個(gè)指針都有一個(gè)對應的數據類(lèi)型,不同指針之間的區別不在指針本身,而在于指針所指的變量的類(lèi)型上。

指針的定義

我們通過(guò)在標識符前加一個(gè)操作符 * 來(lái)定義指針變量。如下,定義一個(gè)指向int類(lèi)型的指針ip,ip沒(méi)有指向任何實(shí)際的對象。

int *ip;

定義一個(gè)指針變量ip1,ip1被初始化為val的地址,通常在變量名前加上&表示取變量的地址。

int val = 100;

int *ip1 = &val;

ip和ip1都指向val,持有同樣的地址值。

ip = ip1;

指針不能指向非地址值,例如下面的賦值是錯誤的:

ip1 = val;

指針不能被初始化或賦值為其他類(lèi)型對象的地址值,例如下面的指針賦值都是錯誤的:

double dval;

ip = &dval;

通常在指針的前面加上一個(gè)*代表取出指針指向地址里面的值:

val = *p1;

C提供了一種特殊的指針類(lèi)型,空(void*)類(lèi)型指針,它可以被任何數據指針類(lèi)型的地址值賦值。void*表明相關(guān)的值是個(gè)地址,但該地址的對象類(lèi)型不知道,我們不能夠操作空類(lèi)型指針所指向的對象,只能傳送該地址值。

void * vp;

vp = ip;

vp = &dval;

指針的運算

c語(yǔ)言中,可以對指針變量p進(jìn)行p++、p--、p + i等運算,運算所得結果同樣是一個(gè)指針,只不過(guò)指針所指向的內存地址相比于p所指的內存地址前進(jìn)或者后退了i個(gè)操作數。用一張圖來(lái)說(shuō)明一下整型指針的操作:

p是一個(gè) int 類(lèi)型的指針,指向內存地址 0x0000001C 處,則p++將指向與p相鄰的下一個(gè)內存地址,由于 int 型數據占 4 個(gè)字節,因此 p++ 所指的內存地址為0x0000001C+4即0x00000020,其余依次類(lèi)推。不過(guò)要注意的是,這種運算只是改變了它所指向的地址。

數組與指針

在C語(yǔ)言中,指針與數組之間的關(guān)系非常緊密,許多可以用數組完成的工作同樣可以使用指針來(lái)完成。

先聲明一個(gè)數組:

int ia[10];

其中ia既表示數組的數組名,也代表著(zhù)數組的首地址,還代表數組首元素的地址,同時(shí)我們可以用ia + i來(lái)代表數組中第i個(gè)元素的地址。那么用指針如何表示呢?

int *ip;

ip = ia;

聲明一個(gè)指向int型的指針ip,上面說(shuō)了ia是個(gè)整型數組的地址,所以可以直接賦值給ip,這時(shí)ip也指向ia這個(gè)數組的首地址。ia[i] 就等效于 *(ia+i) 等效于 *(ip+i) 等效于 ip[i] 。同時(shí)我們可以用&ia[i] - &ia[j] 表示第i個(gè)元素和第j個(gè)元素這兩個(gè)地址之間相隔數據元素的個(gè)數。


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

漏電開(kāi)關(guān)相關(guān)文章:漏電開(kāi)關(guān)原理
漏電保護開(kāi)關(guān)相關(guān)文章:漏電保護開(kāi)關(guān)原理
汽車(chē)防盜機相關(guān)文章:汽車(chē)防盜機原理


關(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>