一。数组与指针的访问方式
char *p=“abcdef”; --------------p[3]:
编译器符号表中有一个指针p,p的地址为4624,4624不是字符串的首地址
运行时步骤1:取地址4624的内容“5081”
运行时步骤2:取i的值,再加上5081
运行时步骤3:取地址【5081+i】的内容‘d’
char a[ ]="abcdef";--------------a[3]
编译器符号表中有a的对应地址9980,即数组首地址
运行时步骤1:取i的值,再加上9980
运行时步骤2:取地址【9980+1】的内容‘d’总结:数组取值比指针取值少一次内存访问
如果p被声明为指针p[i]就进行 操作*(*p+i)----------不论p本身是数组还是指针,如果p本身是数组那操作就变成了 取数组第一个字符当地址加上i 当地址取值,结果就不正确了
如果p声明为数组p[ i ] 就进行操作 *(p+i)
二。编译器并不为指针所指向的对象分配空间,只分配指针本身的空间,除非在定义时同时赋给指针一个字符串常量进行初始化(其他类型都不可以)