我们有以下代码片段:
我不明白为什么在调用printf时没有出现错误/警告。我确实收到了警告,但没有错误,程序运行良好,打印“12”。printf期望的是char *类型的参数,即指向char的指针。因此,如果我声明char arr[3],则arr是包含char的内存单元的地址,因此如果我使用它调用printf,则会衰减为pointer to char,即char *。类似地,tab是包含3个char的数组的地址,这些char类型的内存单元的地址是char,因此tab将衰减为char **,这应该是一个问题,因为printf期望char *。
有人能解释一下这个问题吗?
补充说明:
我得到的警告是:
a.c:6: warning: char format, different type arg (arg 2)
char tab[2][3] = {'1', '2', '\0', '3', '4', '\0'};
printf("%s\n", tab);
我不明白为什么在调用printf时没有出现错误/警告。我确实收到了警告,但没有错误,程序运行良好,打印“12”。printf期望的是char *类型的参数,即指向char的指针。因此,如果我声明char arr[3],则arr是包含char的内存单元的地址,因此如果我使用它调用printf,则会衰减为pointer to char,即char *。类似地,tab是包含3个char的数组的地址,这些char类型的内存单元的地址是char,因此tab将衰减为char **,这应该是一个问题,因为printf期望char *。
有人能解释一下这个问题吗?
补充说明:
我得到的警告是:
a.c:6: warning: char format, different type arg (arg 2)