C声明char *数组

时间:2009-07-11 05:40:10

标签: c

我以为你可以声明一个数组,然后再启动它。

喜欢这样

char* myArray[3];


//CODE INBETWEEN 

myArray[3] = {

            "blah",
            "blah",
            "blah"};

6 个答案:

答案 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)

你错了。初始化只能在 at 声明中进行。之后,您只能分配单个值。

答案 4 :(得分:0)

这是一个初始化表达式。中间不能有那个代码,必须在声明的线上使用。

答案 5 :(得分:0)

目前还不清楚您要解决哪个现实世界问题

  

我认为您可以声明一个数组,

...可以通过很多方式实现,但是出于这个问题,我想重点介绍在struct内部声明一个数组。

struct my_struct {
    char *my_array[3];
};
  

,然后将其初始化。

     

喜欢

struct my_struct fubar;
fubar = (struct my_array) { { "hello", "world" } };

从技术上讲,这是初始化不同数组(在匿名对象中),然后分配整个struct可能对解决您的现实世界问题(无论是什么)很有用...但是希望以后对其他人了解您可以分配的最终用途其中有数组的struct个...