Objective-Cでは、関数名にアスタリスクが付く場合と、
例) NSString *boolstring( BOOL yesNO){}
変数名にアスタリスクが付く場合、
例 1) FILE *handle = fopen("./test.txt", "r");
例 2) NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
が、ありますがなぜでしょうか。
また、このように書くとエラーになるのはなぜでしょうか。
例) int *count =10;
アスタリスクを付けなければいけない場合、
付けてはいけない場合、
(あれば)付けても付けなくてもどちらでもいい場合を具体的に教えてください。
よろしくお願い致します。
この場合の * は変数(count)に付いているのではなく、型(int)に付いています。
int *count = 0;
「int *」が変数の型、「count」が変数です。
int *とはint型の値へのポインタ(int型の値が格納されているメモリの先頭アドレス)という型を表します。
これはC言語由来の機能ですので、C言語についての書籍などをご覧ください。またはググる(google:C言語 ポインタ)とか。
単にint型の変数を用意して、0で初期化したい場合は
int count = 0;
となります。
fopen()や[[NSAutoreleasePool alloc] init]の戻り値に*を付ける必要があるのは、
fopen()や[[NSAutoreleasePool alloc] init]がそれを求めている(ポインタを返している)からです。
この辺りもC言語由来ですので、ポインタについて改めてお調べください。
ポインタについて理解出来れば
アスタリスクを付けなければいけない場合、
付けてはいけない場合、
(あれば)付けても付けなくてもどちらでもいい場合を具体的に教えてください。
という問いについても自ずと答えが出ると思います。
この場合の * は変数(count)に付いているのではなく、型(int)に付いています。
int *count = 0;
「int *」が変数の型、「count」が変数です。
int *とはint型の値へのポインタ(int型の値が格納されているメモリの先頭アドレス)という型を表します。
これはC言語由来の機能ですので、C言語についての書籍などをご覧ください。またはググる(google:C言語 ポインタ)とか。
単にint型の変数を用意して、0で初期化したい場合は
int count = 0;
となります。
fopen()や[[NSAutoreleasePool alloc] init]の戻り値に*を付ける必要があるのは、
fopen()や[[NSAutoreleasePool alloc] init]がそれを求めている(ポインタを返している)からです。
この辺りもC言語由来ですので、ポインタについて改めてお調べください。
ポインタについて理解出来れば
アスタリスクを付けなければいけない場合、
付けてはいけない場合、
(あれば)付けても付けなくてもどちらでもいい場合を具体的に教えてください。
という問いについても自ずと答えが出ると思います。
C言語由来の機能だったのですね、C言語の書籍にてポインタを理解したところ、
今回の疑問だった部分について納得できました。
ありがとうございました。
例 1) FILE *handle = fopen("./test.txt", "r");
この場合は、変数の宣言と代入を同時に行ってるのでわからなくなってるだけです。
FILE *handle; //宣言
handle = fopen("./test.txt", "r"); //代入
>(あれば)付けても付けなくてもどちらでもいい場合
ない
必要ない限り、自分自身では*を使わないことです。
fopenとかそういう定型の処理で*を使う場合がほとんどですので
それはそういうものだと考えて使うしかありません。
入門 Objective-C 2.0 (Programmer’s SELECTION)
Scott Knaster Mark Dalrymple 長尾 高弘
この手の本を流し読みしてください。
まさにこの本を読んでの疑問でした。
この書籍には、ポインタについての説明がほとんど無かったため質問させていただきました。
C言語の入門書を読んだところ、理解できました。
ありがとうございます。
C言語由来の機能だったのですね、C言語の書籍にてポインタを理解したところ、
今回の疑問だった部分について納得できました。
ありがとうございました。