首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >char *数组和char array[]

char *数组和char array[]
EN

Stack Overflow用户
提问于 2013-12-03 09:21:17
回答 3查看 180.9K关注 0票数 24

如果我写这个

代码语言:javascript
复制
 char *array = "One good thing about music";

我真的创建了一个数组?我是说这是一样的?

代码语言:javascript
复制
char array[] = {"One", "good", "thing", "about", "music"};
EN

回答 3

Stack Overflow用户

发布于 2013-12-03 09:32:36

不,你在创建一个数组,但有一个很大的区别:

代码语言:javascript
复制
char *string = "Some CONSTANT string";
printf("%c\n", string[1]);//prints o
string[1] = 'v';//INVALID!!

数组是在内存的只读部分中创建的,因此不能通过指针编辑值,但是:

代码语言:javascript
复制
char string[] = "Some string";

创建相同的只读常量字符串,并将其复制到堆栈数组中。这就是为什么:

代码语言:javascript
复制
string[1] = 'v';

在后一种情况下有效。

如果你写:

代码语言:javascript
复制
char string[] = {"some", " string"};

编译器应该会抱怨,因为您正在构造char数组(或char指针),并将其分配给一个chars数组。那些类型不匹配。要么写:

代码语言:javascript
复制
char string[] = {'s','o','m', 'e', ' ', 's', 't','r','i','n','g', '\o'};
//this is a bit silly, because it's the same as char string[] = "some string";
//or
char *string[] = {"some", " string"};//array of pointers to CONSTANT strings
//or
char string[][10] = {"some", " string"};

最后一个版本为您提供了一个字符串数组(字符数组),您实际上可以编辑.

票数 9
EN

Stack Overflow用户

发布于 2013-12-03 09:23:27

不是的。实际上是“一样”

代码语言:javascript
复制
char array[] = {'O', 'n', 'e', ..... 'i','c','\0');

每个字符都是一个单独的元素,附加一个\0字符作为字符串终止符。

我引用了“相同”,因为char * arraychar array[]之间有一些不同。如果你想读更多,请看一看C:字符指针和数组的区别

票数 2
EN

Stack Overflow用户

发布于 2013-12-03 09:29:08

非常类似于

代码语言:javascript
复制
char array[] = {'O', 'n', 'e', ' ', /*etc*/ ' ', 'm', 'u', 's', 'i', 'c', '\0'};

但却给了你只读记忆。

有关char[]char *之间区别的讨论,请参见公司常见问题1.32

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20347170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档