创建数组时,数组变量的名称(如代码 z、m、k、o、l、e)实际上包含数组的基地址(即数组第 0 个索引的地址)。因此,当您尝试打印 z、m、k、o、l、e 的值时,它们将返回相应数组的基地址。您可以通过以下代码进行检查:
#include <stdio.h>
int main(void)
{
char z[] = " *\n";
char m[] = " *\n";
char k[] = " *\n";
char o[] = "* *\n";
char l[] = " * *\n";
char e[] = " * ";
printf(" %d", z);
printf(" %d", m);
printf(" %d", k);
printf(" %d", o);
printf(" %d", l);
printf(" %d", e);
return 0;
}
上面的代码不会显示任何错误,并将打印相应数组的基地址。
为了更清楚,您可以尝试以下代码:
#include <stdio.h>
int main(void)
{
char z[] = " *\n";
char m[] = " *\n";
char k[] = " *\n";
char o[] = "* *\n";
char l[] = " * *\n";
char e[] = " * ";
printf(" %c", &z);
printf(" %c", &m);
printf(" %c", &k);
printf(" %c", &o);
printf(" %c", &l);
printf(" %c", &e);
return 0;
}
上面的代码再次不会显示任何错误,并将打印各自数组的第一个字符。我希望它能让您清楚为什么您的代码显示错误。
现在,当您使用 %s 和数组名称时,它将获取数组的基地址,并从该地址打印整个字符串,直到找到 null,如下所示。:
#include <stdio.h>
int main(void)
{
char z[] = " *\n";
char m[] = " *\n";
char k[] = " *\n";
char o[] = "* *\n";
char l[] = " * *\n";
char e[] = " * ";
printf(" %s", z);
printf(" %s", m);
printf(" %s", k);
printf(" %s", o);
printf(" %s", l);
printf(" %s", e);
return 0;
}
而且,如果您想在 char 数组的特定索引处打印特定字符,则可以尝试使用以下代码:
#包括
int main(void)
{
char z[] = " *\n";
char m[] = " *\n";
char k[] = " *\n";
char o[] = "* *\n";
char l[] = " * *\n";
char e[] = " * ";
printf(" %c", z[indexValue]);
printf(" %c", m[indexValue]);
printf(" %c", k[indexValue]);
printf(" %c", o[indexValue]);
printf(" %c", l[indexValue]);
printf(" %c", e[indexValue]);
return 0;
}