2015-05-14 174 views

回答

4

STR [2]是阵列str的第三元件。它又是一个字符数组,其类型为char[3]。在这样的函数调用中

printf("%s", str[2]); 

该数组被转换为指向其第一个字符(元素)的指针。阵列str[2]的第一个字符可以像str[2][0]那样获得。所以它的地址确定为&str[2][0]

因此,表达式str[2]&str[2][0]是等同的。

至于这个调用

printf("\n%s\n%s",str[2],&str[0]); 

那么它是无效的。格式说明符%s预计类型为char *的参数,而表达式&str[0]的类型为char **。但是因为在任何情况下,表达式&str[0]的值都是数组str[0]的第一个元素的地址,该函数会生成正确的结果。

如果你想为str[2][0]为单个字符,则使用格式说明符%到输出中只有一个字符,而不是必须使用的格式说明%c例如

printf("\n%c\n%s",str[2][0],&str[0][0]); 
      ^^^ 

在这个函数调用的字符串c的输出。

+0

为什么我们不能简单地使用str打印[2] [0] ??? –

+1

@Abhishek Sharma我们可以打印符号str [2] [0],但因为它有char类型(它是一个字符),我们必须使用格式说明符%c而不是%s,因为格式说明符%s需要一个指向字符的指针的单个字符 –

+0

感谢您的回复..我是一个初学者编程。是的,你是ri8。 –