Cを勉強してみた。-ポインタ編-
ポインタの理解があいまいだからCを勉強し始めたことを忘れていた。
ポインタは「あ、分かった!」と思ったら次の瞬間に「あれ、本当にそうか?」となってしまうのが困る。
演算子編
演算子[]の動きについていまいち理解していない。
/* 1. */ int array[10]; array[1] = 5; /* 2. */ int array[10]; *(array+1) = 5;
は同じことだよね。
それは、
識別子[i] は *(識別子 + i) と同値である。
と言いきっていいのか?
「配列とポインタは細かい動作が違うので同一視してはいけない」
というのは分かるんだけどね。
まだ勉強が必要なようです。
いろんな書き方出来るね編
手を動かさないと全く頭に残らないので、動かしてみた。
#include <stdio.h> typedef struct { int id; int age; char name[64]; } dog; int main(void) { dog dogs[4]; dog *p; p = dogs; dogs[0].age = 5; p[1].age = 6; (*(p+2)).age = 7; (p+3) -> age = 8; int i; for (i=0; i<4; i++) { printf("dog[%d] age: %d\n", i, dogs[i].age); } return 0; }
出力:
dog[0] age: 5 dog[1] age: 6 dog[2] age: 7 dog[3] age: 8
書いた自分からみても気持ち悪いなあ。