一、數組中括號與指針的關係
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;
}