一、数组中括号与指针的关系
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;
}