定食屋おろポン

おろしポン酢と青ネギはかけ放題です

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

書いた自分からみても気持ち悪いなあ。