gpt4 book ai didi

c - 初始化指针数组

转载 作者:太空狗 更新时间:2023-10-29 15:17:16 24 4
gpt4 key购买 nike

这个例子工作正常:

static char *daytab[] = {
"hello",
"world"
};

这不是:

static char *daytab[] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};

我的看法是,第一个示例创建了一个数组,其中填充了指向两个字符串文字(它们本身是数组)的指针。第二个示例,IMO,应该是相同的——创建一个数组并用指向两个 char 数组的指针填充它。

谁能给我解释一下为什么第二个例子是错误的?

附言你可能会这样写(还没有测试过):

static char a[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
static char b[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
static char *daytab[] = {
a,
b
};

但这看起来工作量太大 :)。

最佳答案

这个:

{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}

只是一个数组初始化器。它本身并不创建数组。第一个示例,当您将字符串文字分配给指针时,DID 在静态存储中创建这些字符串(对您隐藏),然后将指针分配给它们。

所以基本上,没有办法用数组初始化器来初始化你的 char* 。您需要创建一个实际的数组,并将这些数字分配给它。你必须做类似的事情:

char a[][] = { {32, 30, 0}, {34, 32, 33, 0} }; // illegal

但这是违法的。

您需要像上一个示例一样单独构建数组并将它们分配到一个数组中。

关于c - 初始化指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/608511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com