ドットとアロー

Cは参考書レベルならどうにかなってきたかもしれない。
今構造体やってる。が、腑に落ちないところがひとつ。

  • >と.の違いがわからない。orz

どうせならどっちかで統一してほしいと思った。
まぁどうせなにか深い事情があるんだと思うから華麗にスルー。

最初にCを読んでみたときは、あちこちにあった->に悩んだよ。
「->!?矢印?新手の代入演算子か!
そうか。A=BをB->Aに書き換えられるんだな!」
なんていう妄想が一秒出てきてはじけたなんてこともあった。

C++の参考書も買ってきたし。これで勝つる!

3/25 17:07追記

uskzさんからご指摘いただきました。
a->bは(*a).bに書き換えできるそうです。
なるほど。*よりも.のほうが優先順位が高いから(*a)なのか。
というわけでびふぉーあふたーどうぞ。

Before
#include <stdio.h>

typedef struct Test{
	int result;
	unsigned int n : 3;
}Test;

int factorial(Test *x){
	int i;
	x -> result = 1;
	for (i=1; i<=x -> n; i++){
		x -> result *= i;
	}
	return 0;
}

int main(void){
	Test x;
	x.n = 4;
	printf("The address of x:%p\n", &x);
	printf("The result of factorial:%d\n", factorial(&x));
	printf("The result of x:%d\n", x.result);
	return 0;
}
After
#include <stdio.h>
typedef struct Test{
	int result;
	unsigned int n : 3;
}Test;

int factorial(Test *x){
	int i;
	(*x).result = 1;
	for (i=1; i<=(*x).n; i++){
		(*x).result *= i;
	}
	return 0;
}

int main(void){
	Test x;
	x.n = 4;
	printf("The address of x:%p\n", &x);
	printf("The result of factorial:%d\n", factorial(&x));
	printf("The result of x:%d\n", x.result);
	return 0;
}

相違点だけ書け?アーアー聞こえない。
うまくいきました。uskzさん本当にありがとうございます!