溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語言指針綜合應(yīng)用的示例分析

發(fā)布時(shí)間:2022-03-03 14:35:29 來源:億速云 閱讀:138 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)C語言指針綜合應(yīng)用的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

    指針是什么?

    指針是c語言中的一個(gè)重要概念,也是C語言的一個(gè)重要的特色,正確而靈活地運(yùn)用它,可以使程序簡(jiǎn)潔,緊湊,高效,每一個(gè)學(xué)習(xí)和使用c語言的人,都應(yīng)當(dāng)深入了解地學(xué)習(xí)和掌握指針,可以說,不掌握指針就是沒有掌握C的精華也可以說

    指針是C語言的靈魂(doge)

    由于通過地址能找到所需的變量單元,可以說,地址指向變量單元,打個(gè)比方,一個(gè)房間的門口掛了一個(gè)房間號(hào)2008,這個(gè)2008就是房間的地址,或者說,2008"指向"該房間.因此,將地址形象化地稱為“指針”。意思是通過它能找到以它為地址的內(nèi)存單元!

    指針變量  

    C語言指針綜合應(yīng)用的示例分析

    使用指針變量的例子

    例  通過指針變量訪問整型變量

    int main() {
        int a = 100, b = 10;//定義整型變量a,b并初始化
        int* p1, * p2;     //定義指向整型數(shù)據(jù)的指針變量p1,p2;
        p1 = &a;          //把變量a的地址賦給指針變量p1
        p2 = &b;         //把變量a的地址賦給指針變量p2
        printf("a=%d,b=%d\n", a, b);//輸出變量a和b的值
        printf("*p1=%d,*p2=%d\n", *p1, *p2);
            }

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

    C語言指針綜合應(yīng)用的示例分析

    C語言指針綜合應(yīng)用的示例分析

    在開頭處定義了兩個(gè)指針變量p1和p2。但此時(shí)他們并未指向任何一個(gè)變量,只是提供兩個(gè)指針變量,規(guī)定他們可以指向整型變量,至于指向哪一個(gè)整型變量,要在程序中指定.。程序第五第六行的作用就是使p1指向a,使p2指向b,此時(shí)p1的值為&a(即a的地址),p2的值為&b(即為b的地址)

    *注意:定義指針變量時(shí),左側(cè)應(yīng)有類型名,否則就不是定義指針變量.

    例如:

    C語言指針綜合應(yīng)用的示例分析

    通過指針引用數(shù)組

    所謂數(shù)組元素的指針就是數(shù)組元素的地址

    可以用一個(gè)指針變量指向一個(gè)數(shù)組元素。例如

    int arr[10]={1,3,5,7,9,11,13,15,17,19}; //定義a為包含10個(gè)整型的數(shù)組
    int *p;                                //定義p為指向整型變量的指針變量
    p=&a[0];                               //把a(bǔ)[0]元素的地址賦給指針變量p

    &數(shù)組名vs數(shù)組名

    int arr[10];

    我們知道arr是數(shù)組名,數(shù)組名表示數(shù)組收元素的地址。

    那么問題來了 &arr數(shù)組名到底是什么呢??

    不如我們來段代碼吧!

    C語言指針綜合應(yīng)用的示例分析

    由此可以得出數(shù)組名和&數(shù)組名打印的地址是一樣的。

    我們?cè)賮砜匆欢未a!

    C語言指針綜合應(yīng)用的示例分析

    根據(jù)代碼我們發(fā)現(xiàn),其實(shí)&arr和arr,雖然值是一樣的,但是意義應(yīng)該不一樣

    實(shí)際上&arr表示的是數(shù)組的地址而不是數(shù)組首元素的地址。

    數(shù)組的地址+1 跳過整個(gè)數(shù)組的大小,所以&arr+1相對(duì)于&arr的差值是40.

    野指針

    概念:野指針就是指針指向的位置是不可知的,(隨機(jī)性的丶不正確的丶沒有明確限制的)

    野指針成因

    1.指針未初始化

    C語言指針綜合應(yīng)用的示例分析

    2.指針越界訪問

    C語言指針綜合應(yīng)用的示例分析

    如何避免野指針

    • 指針初始化

    • 小心指針越界

    • 指針指向空間釋放即使置NULL

    • 避免返回局部變量的地址

    • 指針使用之前檢查有效性

    指針運(yùn)算

    小時(shí)候我們就知道1+1等于幾 那我問你如果是指針加1的話 加的是那個(gè)數(shù)字嗎 ?

    下面來看一段代碼:

    C語言指針綜合應(yīng)用的示例分析

    這里我們可以發(fā)現(xiàn)p跟p+1相差1

    這里c是多少呢 ?

    16進(jìn)制的C的10進(jìn)制是12,所以q+1和q相差4 

    p是整型指針相當(dāng)于sizeof(int)=4

    q是字符型指針相當(dāng)于sizeof(char)=1;

    關(guān)于“C語言指針綜合應(yīng)用的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI