我以为你可以声明一个数组,然后再启动它。
喜欢这样
char* myArray[3];
//CODE INBETWEEN
myArray[3] = {
"blah",
"blah",
"blah"};
答案 0 :(得分:20)
不,你只能在第一次声明时初始化一个数组。原因是数组不是可修改的左值。
在你的情况下:
char *array[] = {"blah", "blah", "blah"};
您无需指定尺寸,但如果需要,也可以。但是,在这种情况下,尺寸不能小于3。此外,这三个字符串被写入只读内存,因此像array[1][2] = 'c'
这样将第二个“blah”更改为“blch”通常会导致段错误。
答案 1 :(得分:3)
正如其他人所说,您只能在声明变量时使用初始化程序。做你想做的最接近的方式是:
char *myArray[3];
/* CODE INBETWEEN */
{
static const char *tmp[3] = {
"blah",
"blah",
"blah" };
memcpy(myArray, tmp, sizeof myArray);
}
答案 2 :(得分:1)
是的,你可以声明一个数组然后再初始化它 但是,这里有一个例外 您正在声明一个字符指针数组(工作正常) 然后,您实例化常量字符串以将它们分配给数组。
这就是问题出现的地方
常量字符串只是编译器原语,它们不会像您使用它们那样获得任何可寻址的内存位置。它们可以在数组初始化时分配(如Mike
所示);这将指示编译器将它们分配为在运行时可用的常量,并允许在myArray
的范围开始时进行初始化。
您尝试过的内容与
配合得很好int numberArray[3];
// code here
numberArray[0] = 1;
numberArray[1] = 2;
numberArray[2] = 3;
有助于注意字符指针和字符串实例是两个不同的实体;第一个可以指向第二个。
答案 3 :(得分:0)
答案 4 :(得分:0)
这是一个初始化表达式。中间不能有那个代码,必须在声明的线上使用。
答案 5 :(得分:0)
目前还不清楚您要解决哪个现实世界问题,
我认为您可以声明一个数组,
...可以通过很多方式实现,但是出于这个问题,我想重点介绍在struct
内部声明一个数组。
struct my_struct {
char *my_array[3];
};
,然后将其初始化。
喜欢
struct my_struct fubar;
fubar = (struct my_array) { { "hello", "world" } };
从技术上讲,这是初始化不同数组(在匿名对象中),然后分配整个struct
。 可能对解决您的现实世界问题(无论是什么)很有用...但是希望以后对其他人了解您可以分配的最终用途其中有数组的struct
个...