指針代表內(nèi)存地址。
在萊州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都做網(wǎng)站 網(wǎng)站設(shè)計制作按需策劃設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,萊州網(wǎng)站建設(shè)費用合理。
通常在類型關(guān)鍵字的后面加字符*
來表示指針,表示指針指向什么類型的值。比如,char*
表示一個指向字符的指針,float*
表示一個指向float
類型值的指針。
指針指向的可能還是指針,這時要用兩個星號**
表示。
int** foo;
聲明指針變量之后,編譯器會為指針變量分配一個內(nèi)存空間,但是這個內(nèi)存空間里面的值是隨機的。
因此,指針變量聲明后,必須先讓它指向一個分配好的地址,然后再進行讀寫,這叫做指針變量的初始化。
int* p;
int i;
p = &i;
為了防止讀寫未初始化的指針變量,可以將未初始化的指針變量設(shè)為NULL
。
int* p = NULL;
*
號除了表示指針以外,還可以作為運算符,用來取出內(nèi)存地址里面的值。
void increment(int* p) {
*p = *p + 1;
}
*p
表示指針p
指向的值。對*p
賦值,會改變指針所指向的地址里面的值。
&
運算符用來取出變量所在的內(nèi)存地址。
int x = 1;
printf("x's address is %p\n", &x); // %p是內(nèi)存地址的占位符
&
運算符與*
運算符互為逆運算。
int i = 5;
if (i == *(&i)) // 正確
指針本質(zhì)上是一個無符號整數(shù),代表了內(nèi)存地址。它可以進行運算,但是規(guī)則并不是整數(shù)的規(guī)則。
指針與整數(shù)值的運算,表示指針的移動。
short* j;
j = (short*)0x1234;
j = j + 1; // 0x1236
上面示例中,j
是一個指針,指向內(nèi)存地址0x1234
。你可能以為j + 1
等于0x1235
,但正確答案是0x1236
。原因是j + 1
表示指針向內(nèi)存地址的高位移動一個單位,而一個單位的short
類型占據(jù)兩個字節(jié)的寬度,所以相當于向高位移動兩個字節(jié)。同樣的,j - 1
得到的結(jié)果是0x1232
。
指針移動的單位,與指針指向的數(shù)據(jù)類型有關(guān)。數(shù)據(jù)類型占據(jù)多少個字節(jié),每單位就移動多少個字節(jié)。
雖然指針本質(zhì)上是一個無符號整數(shù),但是指針只能與整數(shù)值進行加減運算,兩個指針進行加法是非法的。
相同類型的指針允許進行減法運算,返回它們之間的距離,即相隔多少個數(shù)據(jù)單位。
高位地址減去低位地址,返回的是正值;低位地址減去高位地址,返回的是負值。
減法返回的值屬于ptrdiff_t
類型,這是一個帶符號的整數(shù)類型別名,具體類型根據(jù)系統(tǒng)不同而不同。這個類型的原型定義在頭文件stddef.h
里面。
short* j1;
short* j2;
j1 = (short*)0x1234;
j2 = (short*)0x1236;
ptrdiff_t dist = j2 - j1;
printf("%d\n", dist); // 1
指針之間的比較運算,比較的是各自的內(nèi)存地址哪一個更大,返回值是整數(shù)1
(true)或0
(false)。
參考: C 語言教程
本文名稱:C 語言指針
瀏覽地址:http://chinadenli.net/article24/dsoigce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、網(wǎng)站內(nèi)鏈、網(wǎng)站建設(shè)、面包屑導(dǎo)航、移動網(wǎng)站建設(shè)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容