char * str="nihao!";
用str这个字符型指针变量存储"nihao!"这个字符串常量的起始地址。系统分配能容纳char*的内存空间(32位系统用4字节)供编程者指定字符或字符串的位置。
char * str=new char[7];
是把指针str指定为系统专门分配出来的7字节长度的内存开始位置。
str="nihao!";
又把str的值改为这字符串常量的起始地址。跟第一种结果相同,但是却要系统无辜地浪费了7个字节的内存空间(是完全没有用到的)。
就像是,你花了钱去买了个新房子(new char[7]),得到国家(系统)批下来的房产证(char* str)。
但是你却硬是要把房产证上地址这一项的内容(str的值)改成你住着的房子的地址("nihao!"这字符串常量的起始地址)。
这种事情你说正常不正常?