char *p="123" 和
char p[]="123"有区别妈??

解决方案 »

  1.   

    看来,就那几位是人,其他的都是虾,真惨呀!*p是指向存储123这个字符串的指针,p里面存放的是内存地址,不是内容。
    p[]在概念上是一个字符数组,如果你要使用*p也是可以的,这时的p就和上面的一样了。从本质上来看两者是没有差别的。
      

  2.   

    从本质上来看两者是有差别的:
    1.如果上面的定义是在函数中,在Dos中,char* p=“123”中p为2个字节,在堆栈中分配,“123”在数据段分配(编译时在程序中), p指向"123"的起始地址字符串”123“占个4字节,其后不能扩展;而char p[]="123"中p为4个字节,在堆栈中分配,内容为“123”,p为的起始地址,其后也不能扩展。
    2.如果在Win32中,char* p=“123”中p为4个字节,在堆栈中分配,“123”在数据段分配(编译时在程序中), p指向"123"的起始地址字符串”123“占个4字节,其后不能扩展;而char p[]="123"中p为4个字节,在堆栈中分配,内容为“123”,p为的起始地址,其后也不能扩展。
    3.char* p="123"中的p可以用new 或malloc等再分配空间,而char p[]="123"中的p不能再次分配空间,其空间大小只能为4。
    如还有问题,请来信:[email protected]