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