關(guān)于C語言的指針和數(shù)組的差異

標(biāo)簽(空格分隔): C語言


C語言中有內(nèi)存四區(qū)的概念,分別是常量區(qū)代碼區(qū)堆區(qū)棧區(qū)
常量區(qū)中的內(nèi)存數(shù)據(jù)是不能改變的,否則將會(huì)發(fā)生不可預(yù)知的錯(cuò)誤。
下面我來看一個(gè)明顯的例子:

我們有一個(gè)字符串反轉(zhuǎn)函數(shù)。

int reverse(char *str)
{
    if (str == NULL)
    {
        return -1;
    }
    int length = strlen(str);

    char *p1 = str;
    char *p2 = str + length - 1;

    while (p1<p2)
    {
        char c = *p1;
        *p1 = *p2;
        *p2 = c;
        p1++;
        p2--;
    }
    return 0;
}

測(cè)試函數(shù):

int main()
{
    char buf[] = "abcderf";

    reverse(buf);

    printf("after revers str = %s\n", buf);
    
    
}

上面的函數(shù)測(cè)試是通過的

測(cè)試函數(shù)2:

int main()
{
    char* buf = "abcderf";

    reverse2(buf);

    printf("after revers str = %s\n", buf);
    
}

上面的函數(shù)測(cè)試時(shí)無法通過的

總結(jié)原因:
使用數(shù)組存放字符串時(shí),有兩個(gè)地方分配內(nèi)存,一個(gè)是常量區(qū),一個(gè)是棧區(qū).
使用指針指向字符串時(shí),棧區(qū)中只是分配了指針變量的存儲(chǔ)空間,常量區(qū)中存放字符常量
使用數(shù)組的時(shí),操作的是棧區(qū)的內(nèi)存空間,使用指針的時(shí),操作的是常量區(qū)的內(nèi)存空間。

數(shù)組和指針還有一些差異:

  1. 數(shù)組做函數(shù)參數(shù),退化成指針。因此當(dāng)我們?cè)趯?shù)組作為參數(shù)傳遞進(jìn)函數(shù)的時(shí),在一般情況下,我們有必要將這個(gè)數(shù)組的大小傳遞給函數(shù)。
  2. 調(diào)用sizeof運(yùn)算時(shí),如果參數(shù)是指針,則得出指針變量的內(nèi)存大小,如果是數(shù)組,則得出數(shù)組的空間.
  3. 數(shù)組在定義時(shí),就需要初始化,而且數(shù)組不能被重新指向,數(shù)組一般不能被malloc,指針空間可以.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,470評(píng)論 3 44
  • C語言中內(nèi)存分配 在任何程序設(shè)計(jì)環(huán)境及語言中,內(nèi)存管理都十分重要。在目前的計(jì)算機(jī)系統(tǒng)或嵌入式系統(tǒng)中,內(nèi)存資源仍然是...
    一生信仰閱讀 1,180評(píng)論 0 2
  • 前言 不知道大家有沒有這樣一種感覺,程序員的數(shù)量井噴了。可能是因?yàn)榛ヂ?lián)網(wǎng)火了,也可能是各家培訓(xùn)機(jī)構(gòu)為我們拉來了大量...
    活這么大就沒飽過閱讀 2,739評(píng)論 6 26
  • 作者;王世榮 青壯農(nóng)哥伴少單, 家中水養(yǎng)碧螺安。 男耕廣野除禾累, 女出殘缸烙餅歡。 入戶炊香湯菜熱, 尋人影渺碗...
    王世榮閱讀 184評(píng)論 1 6
  • 走在操場(chǎng)上,毫無目的 突然,一大叢醒目的紫紅映入眼簾,遠(yuǎn)遠(yuǎn)望去,那一大叢,紅的那么純粹,紫的那么透徹,好似...
    爽朗的記憶歸零閱讀 148評(píng)論 0 0