发布网友
共6个回答
热心网友
《《《《《注意》》》》》》,二楼的绝对是误导!!!!
char p[]="Hello world";中p申请的是栈里的内存,与char p[12]="Hello world"的效果是一样的,这么做以后,将字符串的内容复制到栈的内存里,等到函数结束后,栈内存自动销毁,里面的内容不复存在,这时返回内存的首地址是无意义的;
而char *p="Hello world";中p是一指针变量,常量字符串在C中被认为是const char *类型,存储在常量内存区域,该区域内存直到程序结束才释放,所以此语句的意思就是返回常量字符串在内存中的地址。
char *p1="Hello world";
char *p2="Hello world";
p1与p2的地址值是一样的,都是指向常量字符串的地址;
而char p1[]="Hello world";
char p2[]="Hello world";
p1与p2的地址值一定不一样,因为是栈中不同的内存块,地址当然不一样。
热心网友
第一个是字符数组,为局部变量,p为数组首指针,因为它指向的是一个局部变量,所以返回时会报错。
第二个,要注意的是"hello world"是一个文字常量,不是局部变量,此时p指向的是一个常量空间,返回p当然的是有效的。其实char *p = “hello world”这种用法是不严谨的,它用一个普通指针指向了一个常量。这样使用才是最合理的:
const char *p ="hello world",也就是,用一个指向常量的指针来指向一个常量。
热心网友
两种方法都不对,属于错误的!局部变量返回有什么意思呢?函数结束就释放了,所以是乱码。按照标准的C++,都该乱码!
。第一种正确是托编译器的福,涉及编译器内存分配策略问题,掩盖了你的错误,有如果程序很大,最后你再输出,有可能是乱码的。换个系统编译可能就不行了。
记住:这两种都是错误的,语法上错误,实际也没意义。
热心网友
局部变量在函数返回时会进行析构... 返回的数组被析构,内存都释放了 当然会出现不正常的东西...
热心网友
本身都是在读取栈内存,这是不合理的,因为当一个函数调用结束后,栈内存就不可知了。
热心网友
大家回答的都很好,我就省了。