C语言 此字符* 作业中发生了什么?(混合类型的逗号运算符)



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

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

当我打印出这个变量时,屏幕上出现"3"。

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

编辑(问题解决后(:

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

这是因为operator的运算符和手册页面comma,如果表达式中有多个逗号,则Left to Right求解,但它认为大多数参数是正确的

在声明中

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

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

char *test = 3;

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

最新更新