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