从书中可以看出:
为以下内容编写声明:指向字符的指针,a 10个整数的数组,对10个整数数组的引用,a 指向字符串数组的指针,指向指向的指针 字符,常量整数,指向常量整数的指针,以及 常量指向整数的指针。初始化每一个。
我对“指向字符串数组的指针”感到困惑。 Stroustrup想要什么?这是字面上的意思吗?以哪种方式?
直接而简单的解决方案:
char* c[] = {"foo", "bar", "baz"};
char** c_ptr;
或者这个:
typedef char carray[20];
typedef array* carray_ptr;
carray_ptr ptr = new carray[10];
你怎么看? (好吧,指针指针不是很直。)
答案 0 :(得分:2)
通过这些类型的声明测试,使用像cdecl
这样的工具通常最容易。我认为在这种情况下,本书正在寻找的是:
c
是一个指针:
*c
到一个数组:
(*c)[]
字符串:
char *(*c)[]
或者来自cdecl
:
cdecl> declare c as pointer to array of pointer to char
char *(*c)[]
我只是猜测了本书所期望的内容,但由于下一个请求是“指向一个字符的指针”,所以两个人要问同样的事情会很奇怪。
答案 1 :(得分:0)
typedef char* character_string;
typedef character_string[20] array_of_character_strings;
typedef array_of_character_strings* pointer_to_array_of_character_strings;
pointer_to_array_of_character_strings ptr; //done
或:
char*(*var)[20];
显示在:cdecl.ridiculousfish.com,“将var声明为指向char的指针数组20的指针”
答案 2 :(得分:0)
1)第5章是关于“指针,数组和结构”。 我没有看到任何“typedef”浏览章节,所以我不会在这个练习中使用它们。
2)可以指出“argv”是“指向字符串数组的指针”的一个很好的例子:
int main (int argc, char *argv[])
3)你的第一个例子中的“c_ptr”肯定会起作用(虽然可能是一个更好的名字 可能是“c_pp”;)):
char* c[] = {"foo", "bar", "baz"};
char** c_ptr = c;
'希望有所帮助!
答案 3 :(得分:0)
将其细分为步骤:
指向数组的指针:T (*p)[N]
T = char const *
为您提供:char const * (*p)[N]
我们用现有东西的地址初始化一个指针,所以首先创建一个数组:
char const * arr[] = { "hello", "world" };
现在从(2)开始初始化:char const * (*p)[2] = &arr;