ポインタと配列 in C
単なるHello, World!プログラムだけど、ちょっと深く考えてみた。
#include <stdio.h> int main(void) { /* 1.忘れがち 文字列定数(ex: "This is String") は文字の配列である。これの内部表現 は終端にヌル文字'\0'が挿入された、 文字数+1の要素をもつ配列になっている。 2.よく考えると printf("Hello\n"); というのは、printf関数に文字配列 (string[] = "Hello\n";)を引数として 渡していることになる。 したがって、printfが受け取っている のは、配列string[]の先頭へのポインタ (先頭のアドレス)である。 3.ポインタと配列 char array[] = "now is the time"; char *pointer = "now is the time"; この2つの定義には違いがある。 array : 初期値となる文字列を'\0'を ぴったり保持するだけの大きさ を持つ配列。 配列内の文字列を変えても arrayは同じメモリ位置を指す。 pointer : 文字列定数を指すように初期化 されたポインタ。 したがって、他の場所を指す ように後で変えることができる。 しかし、文字列の内容を変え ようとすると、その結果は不定。 */ char *output = "Hello, World!\n"; /* [printf] int printf(const char *format, ...); 引数は可変個の出力書式文字列(*format) */ printf(output); return 0; }
| 固定リンク
「C」カテゴリの記事
- CG法(2008.12.09)
- グラフの表示を遅延(2008.07.14)
- ポインタのこと、もっと知りたいんです。(2008.06.28)
- mallocで動的に確保してくれる関数(2008.05.27)
- Static(2008.04.17)
コメント