如何使用printf从字符串数组中打印单个字符?

int*_*i78 1 c arrays pointers

让我说我有

char *names[] = { "Tom", "Jerry" };
Run Code Online (Sandbox Code Playgroud)

我想用"杰里"打印"e" printf.我的第一直觉是

printf("%c\n", *names[5]);
Run Code Online (Sandbox Code Playgroud)

但是当我应用我一直在学习的指针时,我意识到这是完全垃圾代码,因为5指的是不存在的第五个指针names,而不是"杰里"中的"e".包含的指针names只会引用各自字符串中第一个字符的内存地址.

因此,我真正需要做的是添加一个字节names[1]指向,并在"Jerry"中打印"e".但是我不知道该怎么做,或者它是否被允许在C.

完成此任务的最佳方法是什么?先感谢您.

Fre*_*son 6

我想你要找的是printf("%c\n", names[1][1]);.


Som*_*ude 6

问题是你没有多维数组,你有一个包含数组指针的单维数组.

在内存中,您的数组看起来像这样:

+----------+----------+
| names[0] | names[1] |
+----------+----------+
  |          |
  |          V
  |          +---------+
  |          | "Jerry" |
  |          +---------+
  V
  +-------+
  | "Tom" |
  +-------+

上面的图像应该清楚地表明,当你这样做时*names[5],首先必须记住编译器解密为*(names[5]),这意味着你试图取消引用只有两个条目的数组中的第六个条目.这将导致未定义的行为.