數組中括號與指針關係、數組名常量指針分析

一、數組中括號與指針的關係
1、[]的本質和 *p 是一樣的,只不過符合程序員的閱讀習慣。
2、buf5是一個指針(數組首元素的地址),是隻讀的常量,即buf5是一個常量指針
C編譯器這樣做的原因:爲了保證,在析構內存的時候,buf5所指向的內存空間安全釋放。
若buf5可以改變,假設加上了64,那麼在析構其所指向的內存空間時,只能析構掉從buf5(64)開始到128的這部分,而無法析構掉前面的一部分
3、p普通指針可以加減,但是數組首元素的地址不可以加減(因爲是常量指針)。
這裏寫圖片描述

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

//通過數組下標和指針
void main()
{
    int i = 0;
    char *p = NULL;
    char buf5[128] = "abcdefg";

    for( i=0 ; i<strlen(buf5) ; i++ )
    {
        printf("%c  ",buf5[i]);
    }
    printf("\n");
    p = buf5;  //“buf5代表數組的地址”這句話是錯誤的
               // buf5代表的應該是數組首元素的地址 
    for( i=0; i<strlen(buf5); i++ )
    {
               printf("%c  ",*p);
        p = p+1;  //p普通指針可以加1
    }
    printf("\n");

    for( i=0; i<strlen(buf5); i++ )
    {
        printf("%c  ",*(buf5+i));
    }
    printf("\n");

    // [] 和 * 的推導過程
    // buf5[i] --> buf5[0+i] --> *(buf5+i)

    {
        //buf5 = buf5+1;  //錯誤,數組首元素的地址是指針常量不能加1
    }

    system("pause");
    return;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章