如果我写这个
char *array = "One good thing about music";我真的创建了一个数组?我是说这是一样的?
char array[] = {"One", "good", "thing", "about", "music"};发布于 2013-12-03 09:32:36
不,你在创建一个数组,但有一个很大的区别:
char *string = "Some CONSTANT string";
printf("%c\n", string[1]);//prints o
string[1] = 'v';//INVALID!!数组是在内存的只读部分中创建的,因此不能通过指针编辑值,但是:
char string[] = "Some string";创建相同的只读常量字符串,并将其复制到堆栈数组中。这就是为什么:
string[1] = 'v';在后一种情况下有效。
如果你写:
char string[] = {"some", " string"};编译器应该会抱怨,因为您正在构造char数组(或char指针),并将其分配给一个chars数组。那些类型不匹配。要么写:
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"};最后一个版本为您提供了一个字符串数组(字符数组),您实际上可以编辑.
发布于 2013-12-03 09:23:27
不是的。实际上是“一样”
char array[] = {'O', 'n', 'e', ..... 'i','c','\0');每个字符都是一个单独的元素,附加一个\0字符作为字符串终止符。
我引用了“相同”,因为char * array和char array[]之间有一些不同。如果你想读更多,请看一看C:字符指针和数组的区别
发布于 2013-12-03 09:29:08
非常类似于
char array[] = {'O', 'n', 'e', ' ', /*etc*/ ' ', 'm', 'u', 's', 'i', 'c', '\0'};但却给了你只读记忆。
有关char[]和char *之间区别的讨论,请参见公司常见问题1.32。
https://stackoverflow.com/questions/20347170
复制相似问题