C語(yǔ)言從零開(kāi)始(十六)-指針1

終于要講到指針了,幾乎每個(gè)人在學(xué)習(xí)C語(yǔ)言的時(shí)候都會(huì)說(shuō)指針是最難學(xué)的一部分。接下來(lái)的幾篇中,我們會(huì)通過(guò)各種例子詳細(xì)地說(shuō)明指針的用法,力求讓大家不再見(jiàn)到指針就害怕。

在學(xué)習(xí)之前,請(qǐng)先看一下博主的另外一篇文章21天C語(yǔ)言代碼訓(xùn)練營(yíng)(第四天)看了這篇文章,你會(huì)了解指針和數(shù)組的內(nèi)在關(guān)系,同時(shí)方便大家通過(guò)數(shù)組來(lái)理解指針的概念。

大家要時(shí)刻記住一句話:指針就是一個(gè)地址,數(shù)組名就是指針。

下面我們開(kāi)始講解指針的基礎(chǔ)知識(shí)。

地址與指針

C語(yǔ)言中的取地址運(yùn)算符是“&”,通過(guò)在變量前加這個(gè)符號(hào)表示變量的地址。如:

float x;
int a[10];

printf("%d %d", &x, &a[0]);

這段代碼打印出的是x的地址和數(shù)組a首個(gè)元素的地址。

最容易被混淆的一對(duì)概念就是“變量的指針和指針變量”。

  • 變量的指針:某個(gè)變量的地址(指針就是地址)
  • 指針變量:存放地址的變量。

如int* p;中,p是指針變量,變量的指針是p中保存的地址。

指針變量的定義

1. 格式

數(shù)據(jù)類(lèi)型* 指針變量名;

如:

int* p1;
char* p2;

注意:

  • 指針變量是p1和p2,不是*p1,*p2
  • 在沒(méi)有賦值之前,指針變量中的地址是一個(gè)隨機(jī)值

2. 賦值

指針變量指向一個(gè)確定的變量必須進(jìn)行賦值,如:

int *p, a;
a = 10;
p = &a;

這段代碼前兩行p和a沒(méi)有任何關(guān)系,當(dāng)執(zhí)行到第三行時(shí),指針變量p才保存了a的地址。我們習(xí)慣說(shuō)p指向了a。

指針變量的引用

1. 指針運(yùn)算符 *

我們用*p表示指針變量p中保存的值。p = &a;中*p相當(dāng)于a。

經(jīng)常在各種考試題中出現(xiàn)的一些關(guān)系:

  • &*p 相當(dāng)于 &(*p) 相當(dāng)于 &a
  • *&a 相當(dāng)于 *(&a) 相當(dāng)于 *p 相當(dāng)于 a

2. 指針的自加和自減

當(dāng)*與++、--共同使用時(shí),經(jīng)常會(huì)出現(xiàn)混淆。例如:

int a = 2;
int* p = &a;
  • (*p)++

相當(dāng)于

a++;
  • *p++
int c = *p++;

相當(dāng)于

int c = *p;
p++; 
  • *++p
int c = *++p;

相當(dāng)于

++p;
int c = *p;

練習(xí)

這里要說(shuō)的是學(xué)習(xí)指針中的一個(gè)經(jīng)典例子。請(qǐng)看下面這段代碼:

int main()
{
    int a = 5, b = 3, t;
    int* p1 = &a;
    int* p2 = &b;
    int* p;

    printf("a : %d, b : %d\n", a, b);
    printf("*P1 : %d, *p2 : %d\n", *p1, *p2);

    p = p1;
    p1 = p2;
    p2 = p;

    printf("a : %d, b : %d\n", a, b);
    printf("*P1 : %d, *p2 : %d\n", *p1, *p2);

    return 0;
}

這個(gè)程序完成了p1,p2兩個(gè)指針變量的交換。需要注意的是,在交換過(guò)程中,我們只是讓兩個(gè)指針變量保存的地址進(jìn)行了交換,而a和b兩個(gè)變量沒(méi)有發(fā)生任何變化。

我是天花板,讓我們一起在軟件開(kāi)發(fā)中自我迭代。
如有任何問(wèn)題,歡迎與我聯(lián)系。


上一篇:C語(yǔ)言從零開(kāi)始(十五)-二維數(shù)組
下一篇:C語(yǔ)言從零開(kāi)始(十七)-指針2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類(lèi)型。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,470評(píng)論 3 44
  • 前言:指針是 C語(yǔ)言一個(gè)重要概念,也是C 語(yǔ)言的一個(gè)重要特色。使程序簡(jiǎn)潔、緊湊、高效。指針乃是C之精華。 數(shù)據(jù)在內(nèi)...
    瀟湘候晨雪閱讀 776評(píng)論 0 0
  • C語(yǔ)言指針的總結(jié) 1. 變量 不同類(lèi)型的變量在內(nèi)存中占據(jù)不同的字節(jié)空間。 內(nèi)存中存儲(chǔ)數(shù)據(jù)的最小基本單位是字節(jié),每一...
    xx_cc閱讀 3,816評(píng)論 11 39
  • 指針 指針是什么 為了了解指針的概念,我們先來(lái)看一個(gè)小故事。話說(shuō)福爾摩斯派華生到威爾爵士居住的城堡去取回一個(gè)重要的...
    去留無(wú)意hmy閱讀 565評(píng)論 0 1
  • 中午下班回家的路上,頭頂?shù)奶?yáng)像個(gè)火球,烤得人渾身冒汗如蒸桑拿,煩悶中突然想起老家的小妹又要開(kāi)始“雙搶”了。家里五...
    詩(shī)意的云閱讀 291評(píng)論 0 1