H*M 发帖数: 1268 | 1 const char* st = "string1";
char str2[] = "string2"
What is the diff.?
我说是st不能改变"string1", string1是string literal放在data segment str2就可以
改变,string2是放在stack
如果写成char* str = "string1"是不对的.可是MS Studio居然可以通过编译。谁帮我澄
清下我理解有误吗?谢了。 |
r**u 发帖数: 1567 | 2 写成const char* st = "string1" 跟写成 char* str = "string1" 是一样的
可以
我澄
【在 H*M 的大作中提到】 : const char* st = "string1"; : char str2[] = "string2" : What is the diff.? : 我说是st不能改变"string1", string1是string literal放在data segment str2就可以 : 改变,string2是放在stack : 如果写成char* str = "string1"是不对的.可是MS Studio居然可以通过编译。谁帮我澄 : 清下我理解有误吗?谢了。
|
H*M 发帖数: 1268 | 3 不一样吧。本质应该写成const char* st
【在 r**u 的大作中提到】 : 写成const char* st = "string1" 跟写成 char* str = "string1" 是一样的 : : 可以 : 我澄
|
r**u 发帖数: 1567 | 4 syntax不一样,但是效果一样。都是const char *str = “string1",这个效果。str
指向一个constant string。
【在 H*M 的大作中提到】 : 不一样吧。本质应该写成const char* st
|
g*******y 发帖数: 1930 | 5 char* str = "string1" 其实是一个合法但是特殊例外的语法,只适用于string
literal,这是为了要兼容过去C里的写法。
【在 r**u 的大作中提到】 : 写成const char* st = "string1" 跟写成 char* str = "string1" 是一样的 : : 可以 : 我澄
|
c****p 发帖数: 32 | 6 大部分人只知道const char*指向的位置中的data不能改变,但是不知道char str2[]这
样到底是什么意思。
实际上,C有两种aggregation type,一种是struct,一种就是数组。
比如说,如果我们有
char s[] = {'s','t','r','i'};
那么s就是一个有4个character的buffer,实际上
char s[]={'a','b,'c',0};
跟
char s[]="abc";
是等价的。
定义s的,不是后面那个"abc""string"(那只是operand而已),而是前面的
declaration,并不是说因为可以用指针指向数组,那么数组就可以是指针。
可以看看我copy的这一段:
http://www.codepp.com/default.aspx?g=posts&t=26
可以
我澄
【在 H*M 的大作中提到】 : const char* st = "string1"; : char str2[] = "string2" : What is the diff.? : 我说是st不能改变"string1", string1是string literal放在data segment str2就可以 : 改变,string2是放在stack : 如果写成char* str = "string1"是不对的.可是MS Studio居然可以通过编译。谁帮我澄 : 清下我理解有误吗?谢了。
|
s******s 发帖数: 3694 | 7 最重要一点要描述的是 内存区域(空间)不一样, 一个是stack 一个是 static
可以
我澄
【在 H*M 的大作中提到】 : const char* st = "string1"; : char str2[] = "string2" : What is the diff.? : 我说是st不能改变"string1", string1是string literal放在data segment str2就可以 : 改变,string2是放在stack : 如果写成char* str = "string1"是不对的.可是MS Studio居然可以通过编译。谁帮我澄 : 清下我理解有误吗?谢了。
|
m*******y 发帖数: 68 | 8 还有一个著名的指针和数组名的区别。
可以
我澄
【在 H*M 的大作中提到】 : const char* st = "string1"; : char str2[] = "string2" : What is the diff.? : 我说是st不能改变"string1", string1是string literal放在data segment str2就可以 : 改变,string2是放在stack : 如果写成char* str = "string1"是不对的.可是MS Studio居然可以通过编译。谁帮我澄 : 清下我理解有误吗?谢了。
|