打印字符或字符串的2D数组元素?

时间:2015-05-14 10:23:39

标签: c

main()
{
    char str[][3]={"ab","cd","ef","gh"};
    printf("\n%s\n%s",str[2][0],&str[0][0]);
//WHY WE NEED TO PUT "&" TO PRINT &str[2][0] the element.
}

//虽然这可以正常使用

main()
{
    char str[][3]={"ab","cd","ef","gh"};
    printf("\n%s\n%s",str[2],&str[0]);
}

1 个答案:

答案 0 :(得分: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]的第一个元素的地址,该函数会产生正确的结果。

如果您只想输出单个字符而不是字符串,则必须使用格式说明符%c例如

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

在此函数调用中,str[2][0]是单个字符,然后使用格式说明符%c作为其输出。