そもそもこの配列はなんのアドレスをいれているのですか? ポインタがついている変数、配列はアドレスを入れるだけのものではないのでしょうか? まとめると、 検証コード const char * const foo[] = {"foo", "bar", "baz"}; extern void __print(const char * buf); void main (void) { char * str; __print(foo[0]); }. ポインタ変数は次のように利用します。 これの foo のついている2つのconstを消したりつけたりする。 同様なものをポインタを使って宣言すると、下記のようにポインタの配列となります。 const static char *wday[ ] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", NULL }; [ ]の中には8が入るのですが、コンパイラが数えてくれるので省略しています。 「ポインタ」と「配列」は異なる機能ではありますが、使い方が似ている部分があります。この扱いを知ることで配列をポインタから自由に操ることができるようになります。ポインタを使った配列の扱い方を学びましょう。 はい、これがポインタです。って書いても、何を指しているのかよく分からん。*がポインタなのか!と思うひともいれば、*pointerがポインタなのか!と思う人もいるだろう。いや、そもそもポインタってメモリアドレスってさっき言うたやん?これのどこにメモリアドレスがあるんだ?ポインタって何だ!?とならないためにここでは、「ポインタ型」、「ポインタ型変数」の2つを分けて記す。ちなみに、英文のwikipediaだと、ポインタはオブジェクトと書かれているので、単にポインタと表すときは … と書くとこれは「const int型の変数aへのポインタpa」を宣言したことになります。 この場合constが付き、変更が不可能なのは変数aとなります。 ポインタpaがconstに見えますが、こちらは変更可能です。 まとめると以下のようになります。 鍛錬 238C言語,const とポインタの組み合わせで、可能・不可能なことconst とポインタの組み合わせで、可能・不可能なことについてです。 以下は、次に示す 2 通りの組み合わせについて実際に確認しています。const int *x これの foo のついている2つのconstを消したりつけたりする。 constはポインタ変数に対してよく利用されます。 ポインタ変数に対する使い方は少し注意が必要です。なぜかというと、定義の方法が2種類あるからです。 ポインタ変数の基礎. この配列関数ポインタは一旦初期化した以降は全く変更しないので、変えられないように const をつけておきましょう。 ポインタ自体の値を変更させないのですから、* の後に const をつけるのでしたね。 それぞれのポインタ型と、const修飾の関係を図示します: アスタリスク(*)の前にconstを置いた場合、ポインタ型変数ptrNを介して差し先の値42を書き換えることはできません。(図中では"赤枠"で表現) ポインタ配列の const が理解できなかったのでメモ.
ポインタ変数へのconst付与の効果. ポインタ配列の const が理解できなかったのでメモ. と書くとこれは「const int型の変数aへのポインタpa」を宣言したことになります。 この場合constが付き、変更が不可能なのは変数aとなります。 ポインタpaがconstに見えますが、こちらは変更可能です。 まとめると以下のようになります。 検証コード const char * const foo[] = {"foo", "bar", "baz"}; extern void __print(const char * buf); void main (void) { char * str; __print(foo[0]); }. C言語の const とポインタの * の並び順の意味について、忘れちゃったので、改めて調べてみましたので、それのメモです。 実際にコンパイルしてみるのが早いので、次のコードを書いて gcc でコンパイルし … 例えばC言語では文字列が char へのポインタなので、文字列の配列は二重ポインタ char** になる。 それに対する const を置ける位置は3ヶ所なので、組み合わせは2の3乗で8通り:
const MONTH_NAME[]はこの、MONTH_NAME[]配列に、{ブロック内の月の読み方}以外の値を代入できない . 例えば下記のようにhoge.cに「ARRAY」というconst配列を宣言し、hoge.hにextern宣言で追加する。 こうすることで、hoge.hをインクルードしたソースファイルにも「ARRAY」という定数配列が使用でき、かつ実体はhoge.cに一つだけなので、無駄な容量も食わない。 複数の配列に対して、それぞれの先頭要素へのポインタを要素として持つ配列です。 const char * menu [] = { "New Game" , "Load" , "CG Gallery" , "Exit" , NULL }; int i ; for ( i = 0 ; menu [ i ] != NULL ; ++ i ) printf ( "[%d] %p -> %s \n " , i , menu [ i ], menu [ i ]); /* == 結果 == [0] 0x8048510 -> New Game [1] 0x8048519 -> Load [2] 0x804851e -> CG Gallery [3] 0x8048528 -> Exit */ 「ポインタ」と「配列」は異なる機能ではありますが、使い方が似ている部分があります。この扱いを知ることで配列をポインタから自由に操ることができるようになります。ポインタを使った配列の扱い方を学びましょう。 constポインタの図解.