c ++编程语言,第5.9章练习1

时间:2012-01-04 19:38:51

标签: c++

从书中可以看出:

  

为以下内容编写声明:指向字符的指针,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];
你怎么看? (好吧,指针指针不是很直。)

4 个答案:

答案 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)

将其细分为步骤:

  1. 指向数组的指针:T (*p)[N]

  2. T = char const *为您提供:char const * (*p)[N]

  3. 我们用现有东西的地址初始化一个指针,所以首先创建一个数组:

    char const * arr[] = { "hello", "world" };

  4. 现在从(2)开始初始化:char const * (*p)[2] = &arr;