Objective-Cのアスタリスクについて質問です。


Objective-Cでは、関数名にアスタリスクが付く場合と、
例) NSString *boolstring( BOOL yesNO){}

変数名にアスタリスクが付く場合、
例 1) FILE *handle = fopen("./test.txt", "r");
例 2) NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

が、ありますがなぜでしょうか。
また、このように書くとエラーになるのはなぜでしょうか。
例) int *count =10;

アスタリスクを付けなければいけない場合、
付けてはいけない場合、
(あれば)付けても付けなくてもどちらでもいい場合を具体的に教えてください。

よろしくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/11/24 16:02:31
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:iwadon No.1

回答回数60ベストアンサー獲得回数13

ポイント42pt

この場合の * は変数(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言語由来ですので、ポインタについて改めてお調べください。

ポインタについて理解出来れば

アスタリスクを付けなければいけない場合、

付けてはいけない場合、

(あれば)付けても付けなくてもどちらでもいい場合を具体的に教えてください。

という問いについても自ずと答えが出ると思います。

id:is0me

C言語由来の機能だったのですね、C言語の書籍にてポインタを理解したところ、

今回の疑問だった部分について納得できました。

ありがとうございました。

2010/11/24 16:02:11

その他の回答1件)

id:iwadon No.1

回答回数60ベストアンサー獲得回数13ここでベストアンサー

ポイント42pt

この場合の * は変数(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言語由来ですので、ポインタについて改めてお調べください。

ポインタについて理解出来れば

アスタリスクを付けなければいけない場合、

付けてはいけない場合、

(あれば)付けても付けなくてもどちらでもいい場合を具体的に教えてください。

という問いについても自ずと答えが出ると思います。

id:is0me

C言語由来の機能だったのですね、C言語の書籍にてポインタを理解したところ、

今回の疑問だった部分について納得できました。

ありがとうございました。

2010/11/24 16:02:11
id:tama213 No.2

回答回数486ベストアンサー獲得回数30

ポイント28pt

例 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 長尾 高弘
4798119989

この手の本を流し読みしてください。

id:is0me

まさにこの本を読んでの疑問でした。

この書籍には、ポインタについての説明がほとんど無かったため質問させていただきました。

C言語の入門書を読んだところ、理解できました。

ありがとうございます。

2010/11/24 16:00:38

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません