现在在笔试和面试经过了很多这样的考题
但是有时就是没有搞清楚
字符数组和字符指针主要是两个方面的区别:
一个是存储空间,一个是在sizeof方面的区别
而在存储空间也导致了char *p="hello';p[1]='x';的错误
但是
char *test(char *p)
{
strcpy(p,"hello");
return p;
}
void main()
{
char str[]="123456789";
cout<<test(str)<<endl;
cout<<str<<endl;
}
这个是可以通过的,因为是传递的指针,指向的字符数组。输出结果是
hello
hello
而改成
char *test(char *p)
{
strcpy(p,"hello");
return p;
}
void main()
{
char *str="123456789";
cout<<test(str)<<endl;
cout<<str<<endl;
}
这个却通不过编译,因为字符串常量是之前就存放在静态区的。
但是
char *test(char *p)
{
p=(char *)malloc(20);
strcpy(p,"hello");
return p;
}
void main()
{
char *str="123456789";
cout<<test(str)<<endl;
cout<<str<<endl;//这里有内存泄露,没有考虑
}
是可以运行的,因为这里重新分配内存,但是对传入的没有改变,运行结果
hello
123456789
但是有时就是没有搞清楚
字符数组和字符指针主要是两个方面的区别:
一个是存储空间,一个是在sizeof方面的区别
而在存储空间也导致了char *p="hello';p[1]='x';的错误
但是
char *test(char *p)
{
strcpy(p,"hello");
return p;
}
void main()
{
char str[]="123456789";
cout<<test(str)<<endl;
cout<<str<<endl;
}
这个是可以通过的,因为是传递的指针,指向的字符数组。输出结果是
hello
hello
而改成
char *test(char *p)
{
strcpy(p,"hello");
return p;
}
void main()
{
char *str="123456789";
cout<<test(str)<<endl;
cout<<str<<endl;
}
这个却通不过编译,因为字符串常量是之前就存放在静态区的。
但是
char *test(char *p)
{
p=(char *)malloc(20);
strcpy(p,"hello");
return p;
}
void main()
{
char *str="123456789";
cout<<test(str)<<endl;
cout<<str<<endl;//这里有内存泄露,没有考虑
}
是可以运行的,因为这里重新分配内存,但是对传入的没有改变,运行结果
hello
123456789