【发布时间】:2015-07-18 23:25:29
【问题描述】:
这几天我一直在阅读 Learn C The Hard Way,但这是我想真正理解的内容。作者 Zed 写道,char ** 用于“指向(指向 char 的指针)的指针”,并说这是必要的,因为我试图指向二维的东西。
这是网页上写的确切内容
一个 char * 已经是一个“指向 char 的指针”,所以它只是一个字符串。但是,您需要 2 个级别,因为名称是二维的,这意味着您需要 char ** 作为“指向(char 的指针)”类型的指针。
这是否意味着我必须使用一个可以指向二维的变量,这就是为什么我需要两个**?
稍微跟进一下,这是否也适用于n维?
这是相关代码
char *names[] = { "Alan", "Frank", "Mary", "John", "Lisa" };
char **cur_name = names;
【问题讨论】:
-
仅供参考,
char *names[] = { /* five string literals */ };不是二维数组。它是一个char指针数组。 -
如果你想要一个指向
some_type类型变量的指针,你需要一个some_type *。some_type是int、char *还是char ***********无关紧要。如果您需要指向它的指针,请添加另一个*。这只是语法。 -
如果
T是任何类型,那么T *指向T。这就是类型系统的定义方式。 -
厌倦了所有垃圾教程和书籍。我发誓我花在不教错误练习上的时间比教正确练习上的时间要多。
-
@solitude
names在您的示例中是一个指针数组。它不是数组数组,cur_name也不是。此外,如果您尝试修改“数组”中的一项,代码将崩溃并烧毁,因为以未定义的行为写入字符串文字。一个好的教程会教你将其声明为const char* names[]。没有理由不这样做。