char *p="123"与char p[]="123"的区别???
#include<iostream.h>
#include<string.h>
void main(void)
{
char *p;
char * aa(void);
p=aa();
char *p1=(char *) new char[100];//以下两行原本想覆盖掉p,呵呵,但没成功
memset(p1,'*',100*sizeof(char));
delete[] p1;
cout<<p<<endl;
}
char * aa()
{
char *temp="abcdefghijk";//改为char temp[]="abcdefghijk";后有问题
return temp;
}
问题是如果是temp[]有下面的警告
E:\test\pointer\a.cpp(18) : warning C4172: returning address of local variable or temporary
且输出也不对了,但象程序那样写就没问题了,我想问一下它们的区别在哪儿?难道char *temp定义的temp不是局部变量??
相关推荐
分析C++中char*和char[]的区别
深入分析C++中char*和char[]的区别,分析的十分透彻,对于新手、高手都适用。
C语言中char*和char[]用法区别分析
本文实例分析了C语言中char* 和 char []的区别。分享给大家供大家参考之用。具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很大。以下是个人的一些看法,有不正确的地方望指正。 本质上来说,char *s定义了一个char型的指针,它只知道所指向的内存单元,并不知道这个内存单元有多大,所以: 当char *s = “hello”;后,不能使用s[0]=’a’;语句进行赋值。这是将提示内存不能为”written”。 当用char s[]=”hello”;后,完全可以使用s[0]=’a’;进行赋值,这是常规的数组操作。 若定义: char s[] = hello;
编写函数void fun(char *s,char *t,char *p)将未在字符串s中出现、而在字符串t中出现的字符, 形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。
编写函数void fun(char *s,char *t,char *p)将未在字符串s中出现、而在字符串t中出现的字符, 形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。 例如: 当s为"12345", t为"8624677"时, p中的字符为: "867"; 当s为”good luck”,t为”thank you very much”时,输出:”thanyverm”
关于char (*p)[] 和char p[]的问题
指针数组与数组的讲解讲的非常详细,看完不懂可以砍我
浅析string 与char* char[]之间的转换
与char*不同的是,string不一定以NULL('0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*


