突然发现了char a[]="123";和cahr* a="123";有什么不同了~
相信稍微有点基础的都知道其中的区别是前者数据可以改写后者只可以读取但不可改写~~
不过我推理前者a的地址和"123"这个常量的首地址是不同的~
因为双引号里面的内容应该是在预编译的时候实现的~是个常量~~
那就可以这样解释了~char a[]="123";有可能编译器是把字符串copy到a里面~不过这个不能用打印验证"123"和a的值是否相等~
这里还有一个问题就是char a[]="123";和char a[4]="123";这还是有不同的~前者没有指明分配空间~所以推测编译器有两种可能的行为~第一种是先获取字符串的总长度再分配空间~但这样获取长度的过程明显需要时间~第二种是边赋值字符边记录空间大小~所以如果细的来说char a[]="123";的执行效率并会比char a[4]="123";的要低一些~~
然而cahr* a="123";这个a是个变量~可以改变的~而且其值正是"123"的首地址值~~
所以得出一个结论就是用指针引用字符串的效率一般会比用数组的要高~
[此贴子已经被作者于2017-5-31 01:03编辑过]