我们有以下代码片段:
char tab[2][3] = {'1', '2', '\0', '3', '4', '\0'};
printf("%s\n", tab);
而且我不明白为什么我们在调用我确实收到警告但没有错误,并且程序运行正常。它打印' printf
. 12
'。
printf
期待一个类型的参数char *
,即指向 的指针char
。因此,如果我声明char arr[3]
, thenarr
是包含 a 的内存单元的地址char
,所以如果我用它调用printf
它,它将衰减为指向 char的指针,即char *
。
类似地,tab
内存单元的地址包含3 个字符的类型数组,而内存单元的地址包含char
,因此tab
将衰减到char **
,这应该是一个问题,因为printf
期望char *
.
有人可以解释这个问题吗?
附录:
我得到的警告是:
a.c:6: warning: char format, different type arg (arg 2)