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

这个char*作业中发生了什么?(混合类型的逗号运算符),c,casting,char,quotes,assign,C,Casting,Char,Quotes,Assign,我正在写一些C代码。在其中一个.c文件中,我可以看到如下内容: char* test = ("someChar", "someChar2", 3); 当我打印出这个变量时,屏幕上会显示“3” 这部分代码中发生了什么?为什么打印出这个字符*会得到3?我最好奇的是这个(“someChar”,“someChar2”,3)表达式 编辑(问题解决后): 让我抓狂的是,这个表达式中有两个字符和一个int。 如果我们使用printf(“%u”,test)我们可以得到这个数字,但是这个代码看起来绝对不干净,我

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

char* test = ("someChar", "someChar2", 3);
当我打印出这个变量时,屏幕上会显示“3”

这部分代码中发生了什么?为什么打印出这个字符*会得到3?我最好奇的是这个
(“someChar”,“someChar2”,3)
表达式

编辑(问题解决后):

让我抓狂的是,这个表达式中有两个字符和一个int。
如果我们使用
printf(“%u”,test)
我们可以得到这个数字,但是这个代码看起来绝对不干净,我相信这不是一种优雅的给字符赋数的方法*

因为
逗号
操作符和
操作符的手册页面说,当在表达式中有多个逗号时,从
左到右求解
,但它考虑了最右边的争论

在声明中

char* test = ("someChar", "someChar2", 3);
test
使用最右边的参数
3
进行赋值。现在看起来像

char *test = 3;
因为
test
char指针
&它应该用有效地址初始化,而
3
不是有效地址。所以如果你只是打印
测试

printf(“%d\n”,测试)不会导致任何错误,但会导致未定义的行为。如果您要像
*test
那样去引用它,那么您的程序就会崩溃(Seg.fault),这是处理指针时应该记住的一种可能的情况。

这是因为
逗号
运算符和
运算符的手册页说,当在表达式中有多个逗号时,然后从
从左到右
求解,但它考虑了最右边的参数

在声明中

char* test = ("someChar", "someChar2", 3);
test
使用最右边的参数
3
进行赋值。现在看起来像

char *test = 3;
因为
test
char指针
&它应该用有效地址初始化,而
3
不是有效地址。所以如果你只是打印
测试

printf(“%d\n”,测试)不会导致任何错误,但会导致未定义的行为。如果你想像
*test
那样去引用它,那么你的程序就会崩溃(Seg.fault),这是在处理指针时你应该记住的一种可能的情况。

我认为这不是你实际看到的代码。如果将char*设置为3,则在尝试打印时很可能会出现分段错误(或垃圾输出)。可能是“3”?@cleblanc:或者打印是
printf(“%d\n”,test)@Fredrarson一定喜欢未定义的行为。类似的定义不是很精确。这行代码到底是什么?以后如何使用
test
?我想这可能与您实际看到的代码不同。如果将char*设置为3,则在尝试打印时很可能会出现分段错误(或垃圾输出)。可能是“3”?@cleblanc:或者打印是
printf(“%d\n”,test)@Fredrarson一定喜欢未定义的行为。类似的定义不是很精确。具体是哪一行以及以后如何使用
测试
?使用
%d
打印字符*的可能重复项仍然未定义行为Up@cleblanc agree。我想写,但忘了写。修改。谢谢你的解释。我要说清楚的是:我在这篇文章中的int值不是错误的。但是我不知道为什么最初的程序员把这个整数放在那里。欢迎!!可能是最初的程序员想知道一个人是否正确理解逗号运算符。但是您应该知道所有可能的情况,特别是指针。使用
%d
打印字符*仍然是未定义的行为up@cleblanc agree。我想写,但忘了写。修改。谢谢你的解释。我要说清楚的是:我在这篇文章中的int值不是错误的。但是我不知道为什么最初的程序员把这个整数放在那里。欢迎!!可能是最初的程序员想知道一个人是否正确理解逗号运算符。但您应该了解所有可能的场景,特别是指针。