gpt4 book ai didi

C双字符指针声明和初始化

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

我总是这么说

char *c = "line";

相同
char c[] = "line";

我也是这样

char **choices = { "New Game", "Continue Game", "Exit" };

这给了我一个不兼容的指针类型,其中

char *choices[] = { "New Game", "Continue Game", "Exit" };

没有。对理解这一点有什么帮助吗?

最佳答案

char *c = "line";

相同
char c[] = "line";

真的一样

static const char hidden_C0[] = "line";
char *c = (char *)hidden_C0;

除了变量 hidden_​​C0 不可直接访问。但是,如果您转储生成的汇编语言,您就会看到它(它的名称通常不是有效的 C 标识符,例如 .LC0)。在您的字符串常量数组示例中,发生了同样的事情:

char *choices[] = { "New Game", "Continue Game", "Exit" };

成为

const char hidden_C0[] = "New Game";
const char hidden_C1[] = "Continue Game";
const char hidden_C2[] = "Exit";

char *choices[] = { (char *)hidden_C0, (char *)hidden_C1, (char *)hidden_C2 };

现在,这是一种特殊情况行为, 可用于字符串常量。你不能写

int *numbers = { 1, 2, 3 };

你必须写

int numbers[] = { 1, 2, 3 };

这就是你不能写的原因

char **choices = { "a", "b", "c" };

要么。

(您的困惑是一种常见误解的特例,即数组与 C 中的指针“相同”。它们不是。数组就是数组。具有数组类型的变量会类型衰减到当它们被使用时是指针类型(几乎在所有上下文中),但不是当它们被定义时。)

关于C双字符指针声明和初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4832082/

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