我们有以下代码片段:
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)