1. char a[10] = { }; *(a+i) 与 a[i]等同。
由于a+i 与 i+a含义一样,因此 a[i] 与 i[a] 也有同样含义。
int main()
{
char data[3] = {1,4,8};
printf("%d %d\n",2[data],data[2]);
return 0;
}//输出为:8 8
2. int* ap; ap是指向整形的指针,
int ap[10]; ap是一个拥有10个整形元素的数组,
int *ap[31]; *ap是一个拥有31个整形元素的数组,所以ap是指向这样数组的指针。
3. 非数组指针
字符串常量代表一块包括字符串中所有字符以及一个空字符('\0')的内存区域的地址
strlen返回参数不包括结束符'\0',所以一个字符串如果strlen申请空间strcy后,%s打印字符串会挂掉。
4. 空指针并非空字符串
常数0可以给用作给指针赋值,与NULL作用一样。这种情况(指针为空的情况),只能对指针本身操作,
不能企图使用该指针所指向的内存中存储的内容。
if(p == (char*)0) 正确;
if( strcmp( p, (char*)0 ) ) 错误,strcmp实现会查看指针指向的内容;
同理,char*p = (char*)0; printf("%s",p); 也是错误的。
5. 数组中实际不存在的“溢界”元素的地址位于数组所占内存之后,这个地址可以用于进行赋值和比较。
int a[N] = { };
a[N]不存在,但是&a[N]存在。