2012-01-04 6 views
2

:以下のためC++プログラミング言語、章帳から5.9エクササイズ1

書き込み宣言:文字へのポインタ、10の整数の 配列、10の配列へのREF-レンス文字列の配列へのポインタ、 文字へのポインタ、定数の整数、定数へのポインタ、および整数への定数ポインタ 。それぞれを初期化します。

「文字列の配列へのポインタ」と混乱します。 Stroustrupは何を望みますか?これは文字通り意味ですか?どのように?

ストレートでシンプルな解決策は:

char* c[] = {"foo", "bar", "baz"}; 
char** c_ptr; 

またはこの1:

typedef char carray[20]; 
typedef array* carray_ptr; 
carray_ptr ptr = new carray[10]; 

あなたはどう思いますか? (さて、ポインタへのポインタはまっすぐではありません)

+1

'開始Stroustrup氏読心システム:210

  • は今(2)から男を初期化します。離陸のためのスタンバイ... ' –

  • +0

    本は良いと思われる。ドイツ語の "C++ von A bis Z"よりも優れ、 "C++をAからZ"に変換しました。しかし、解決策がない練習は役に立ちません。 「コンパニオンブック」が利用可能になっても、私はそれを購入しません。 – Peter

    答えて

    2

    このような宣言テストでは、しばしばcdeclのようなツールを使用するのが最も簡単です。私はこの本が探しているものは、この場合にはいると思う:

    c 
    

    はポインタです:文字列の

    (*c)[] 
    

    char *(*c)[] 
    

    *c 
    

    アレイへ

    またはcdecl

    cdecl> declare c as pointer to array of pointer to char 
    char *(*c)[] 
    

    私はちょうど本が期待するものについての推測をしたが、次の要求が「文字へのポインタへのポインタ」であるため、両者が同じことを尋ねるされるために、それは奇妙なことでしょう。

    +0

    私はきれいに見えます!ありがとうございました! Stroustrupはこの章で彼のサンプルにこれを示しておらず、関数へのポインタについての行しか示していません。私は次の章(オペレータの優先順位を含む)を楽しみにしています。 – Peter

    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は、 "charにポインタのアレイ20へのポインタとしてVARを宣言する"

    0

    1)第5章「ポインタ、配列および構造体についてです" この章では、「typedef's」をスキップしていないので、この演習では使用しません。

    2)の一つがポイントでした。「の文字列の配列へのポインタ」の優れた例として、「ARGV」へ:(ただし

    int main (int argc, char *argv[]) 
    

    3)「C_PTRを」確かに働くだろう、あなたの最初の例では、

    char* c[] = {"foo", "bar", "baz"}; 
    char** c_ptr = c; 
    

    「希望に役立ちます:));多分、より良い名前 は "c_pp" かもしれません!ステップに

    0

    ブレイクそれを下:

    1. 配列へのポインタ:char const * (*p)[N]

    2. 私たちは、既存のもののアドレスでポインタを初期化:T (*p)[N]

    3. T = char const *はあなたを与えますので、最初に配列を作成してください:

    関連する問題