gpt4 book ai didi

c - 这个 char* 赋值发生了什么? (混合类型的逗号运算符)

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:18 25 4
gpt4 key购买 nike

我正在编写一些 C 代码。在其中一个 .c 文件中,我可以看到类似以下内容:

char* test = ("someChar", "someChar2", 3);

当我打印出这个变量时,我在屏幕上看到“3”。

这部分代码发生了什么?为什么打印出这个 char* 后得到 3?我最好奇的是这个("someChar", "someChar2", 3)表达式。

编辑(问题解决后):

让我挠头的还有一个事实,这个表达式中有两个字符和一个整数。如果我们使用 printf("%u", test) 我们可以得到这个数字,但是这段代码看起来肯定不干净,我相信这不是一种将数字分配给 char* 的优雅方式。

最佳答案

这是因为 comma 运算符和 operator 的手册页说 如果在表达式中有多个逗号 然后从 解决从左到右 但它考虑最右 参数。

在声明中

char* test = ("someChar", "someChar2", 3);

test 被分配了最右边的参数,即 3。现在看起来像

char *test = 3;

因为 testchar pointer 并且它应该用有效地址 初始化并且 3 不是有效地址.因此,如果您只是像这样打印 testprintf("%d\n",test); 不会导致任何错误,但会导致未定义的行为。如果您打算像 *test 那样取消引用它,那么您的程序就会崩溃(Seg.fault),这是您在处理指针时应该牢记的一种可能情况。

关于c - 这个 char* 赋值发生了什么? (混合类型的逗号运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50722200/

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