C++中char *和char []的区别(二)

2014-11-24 11:21:34 · 作者: · 浏览: 1
,而且是从高地址到低地址

2293620 4199056 abc 看出编译器将c3优化指向常量区的"abc"

继续思考:

代码:

#include

using namespace std;

main()

{

char *c1 = "abc";

char c2[] = "abc";

char *c3 = ( char* )malloc(3);

// *c3 = "abc" //error

strcpy(c3,"abc");

c3[0] = 'g';

printf("%d %d %s\n",&c1,c1,c1);

printf("%d %d %s\n",&c2,c2,c2);

printf("%d %d %s\n",&c3,c3,c3);

getchar();

}

输出:

2293628 4199056 abc

2293624 2293624 abc

2293620 4012976 gbc

写成注释那样,后面改动就会崩溃

可见strcpy(c3,"abc");abc是另一块地方分配的,而且可以改变,和上面的参考文档说法有些不一定.

*c3 = "abc";

这句话本来就有问题,编译都通不过

c3是指针变量,所指的内容是char型.而你这句话是想让它所指的内容变成字符串,显然是不对的

c3 = "abc";

这样就没问题了

但此时,c3存储的就是的字符串常量的地址了,所以不能再给c3所指的内容赋值了:c3[0] = 'g';是非法的

此外,函数在压栈,一般是先把参数(arguments)压栈,然后才是返回地址


作者:sunshinewave