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

What is happening in this char* assignment? (comma operator with mixed types)

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

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

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

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

编辑(问题解决后):

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

的优雅方式

这是因为 comma 运算符和 operator 的手册页说 当表达式中有多个逗号时 然后从 [=14= 求解] 但它认为 最右 论点。

在声明中

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

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

char *test = 3;

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