C 从二维数组打印字符

C 从二维数组打印字符,c,arrays,string,pointers,multidimensional-array,C,Arrays,String,Pointers,Multidimensional Array,使用指针,我能够找到我想要打印的实际字符(“ElGenerico中的I”)。但是屏幕上出现了一些奇怪的角色,而不是我想要的角色 #include<stdio.h> int main() { char *name[]={"Sami","Kevin","ElGenerico"}; printf("%c",(*(name+2)+7)); return 0; } #包括 int main() { char*name[]={“Sami”、“Kevin”、“ElGene

使用指针,我能够找到我想要打印的实际字符(“ElGenerico中的I”)。但是屏幕上出现了一些奇怪的角色,而不是我想要的角色

#include<stdio.h>
int main()
{
    char *name[]={"Sami","Kevin","ElGenerico"};
    printf("%c",(*(name+2)+7));
    return 0;
}
#包括
int main()
{
char*name[]={“Sami”、“Kevin”、“ElGenerico”};
printf(“%c”,(*(名称+2)+7));
返回0;
}
使用
%s
输出说明符时,此代码的输出为“ico”。 但我只想打印字符“I”。因此我尝试使用
%c
,而不是
%s
。它不起作用。相反,会打印一个双头箭头。
谁能告诉我哪里出错了吗?

你指错地址了。改用这个:

printf("%c",(*(name[2]+7)));
由于您引用的是
name
数组中的第三个元素,因此可以使用

name[2]
然后,您想将单词的第7个元素
ElGenerico
,因此我们需要在地址中添加7:

name[2] + 7
在获得正确的地址后,我们打印出该地址的值,并使用
*
符号:

*(name[2] + 7)

我用了这个,它就解决了,谢谢@David和@rcs的帮助…

我建议使用括号符号来提高可读性

最初,您有:

printf("%c",(*(name+2)+7));
您仍然需要使用*解除引用以获得所需的输出。 这将给你以下信息:

printf("%c",*(*(name+2)+7));
然而,这仍然有点混乱,可读性不强。通过使用括号表示法,可以使其更加清晰,如下所示:

printf("%c", name[2][7]);
#include <stdio.h>

int main()
{
  char* name[] = {"Sami", "Kevin", "ElGenerico"};
  printf("%c", name[2][7]);
  return 0;
}
现在出现错误的空间大大减少,您仍然可以获得预期的输出

您的最终代码如下所示:

printf("%c", name[2][7]);
#include <stdio.h>

int main()
{
  char* name[] = {"Sami", "Kevin", "ElGenerico"};
  printf("%c", name[2][7]);
  return 0;
}
#包括
int main()
{
char*name[]={“Sami”、“Kevin”、“ElGenerico”};
printf(“%c”,名称[2][7]);
返回0;
}

printf(“%c”、*(*(name+2)+7))
(您缺少前面的
“*”
)最好使用
name[2][7]
谢谢您,先生,我现在明白了,先生,为什么您会说名称[2][7]是更好的选择?它比指针符号更可读<代码>*(*(名称+2)+7)
名称[2][7]
要混乱得多,尽管两者完全相同。仅仅因为语言允许我们使用某些东西并不意味着我们应该这样做<代码>名称[2][7]
=可读<代码>*(*(名称+2)+7)=不可读<代码>7[2[名称]]=不可读<代码>名称(2°)(7°)=不可读<代码>7=不可读。有无数种方法可以编写非常难看但有效的C。这并不意味着我们应该使用这些方法。这就是为什么我们不编写如此无用的代码,而是编写
name[2][7]
,这是100%等价的。