人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

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

●質問者: is0me
●カテゴリ:コンピュータ インターネット
✍キーワード:Objective-C test txt アスタリスク エラー
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● いわどん
●42ポイント ベストアンサー

この場合の * は変数(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言語の書籍にてポインタを理解したところ、

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

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


2 ● tama213
●28ポイント

例 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

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

◎質問者からの返答

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

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

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

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ