char*p 与 char p[]的区别
const char *p="Hello World"; char p1[]="Hello world";
从内存的角度来理解其区别:
const char* p是一个指针,根本没有涉及到内存分配,它指向的"Hello World"是只读的,若试图去给它赋值必然发生错误。这里的"Hello World"是字符串常量存储在文字常量区中,是只读的,const char*p 只是提供了一个指向该内存的指针。
而char p1[]是一个数组,它在堆栈中已经分配好内存,将"Hello World"复制到该内存块中。
但总的来说,"Hello World"总是存储在文字常量区,而这两种方式定义的p和p1都是在堆栈中。
const char *p="Hello World";
该语句会在堆栈中先分配一个4字节(32位系统)的指针指向"Hello World"区域。
char p1[]="Hello world";
该语句首先在堆栈上分配一个12个字节的char数组,然后将常量储存区的"Hello World"复制过来。