让我说我有
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.
完成此任务的最佳方法是什么?先感谢您.
问题是你没有多维数组,你有一个包含数组指针的单维数组.
在内存中,您的数组看起来像这样:
+----------+----------+ | names[0] | names[1] | +----------+----------+ | | | V | +---------+ | | "Jerry" | | +---------+ V +-------+ | "Tom" | +-------+
上面的图像应该清楚地表明,当你这样做时*names[5],首先必须记住编译器解密为*(names[5]),这意味着你试图取消引用只有两个条目的数组中的第六个条目.这将导致未定义的行为.