fc2ブログ

NSStringを返す関数、とついでにCの文字列の復習(個人メモ)

09 04, 2010
・文字列リテラルは「名前の無い配列」。メモリのどっかに"abcde/0"という文字列を書き込んで、その先頭番地を表す。Cスタイルでは"abcde"、NSStringでは@"abcde"。

・NSStringの文字列を返す関数はこんな感じで書く

NSString *boolString (BOOL YesNo) // 型としては「NSStringを指すポインタ」を返す
{
  if (YesNo == NO) {
    return (@"No"); // 値としては、文字列「No」の先頭番地を返す
  } else {
    return (@"Yes"); // 値としては、文字列「Yes」の先頭番地を返す
  }
}


・使う時はこう

NSLog (@" %@ ", boolString(YES)); // 結局「Yes」って文字列が表示される
NSLog (@" %@ ", boolString(NO)); // 結局「No」って文字列が表示される


このとき、boolString関数からは「文字列『Yes』か『No』の先頭番地を指すポインタ」が返ってくるわけだけど、NSLogの第2引数のboolString(YES)とかって部分は実態はintか何かで、値としては先頭番地。で、それをNSLogが読み取って表示。

・ふつうのC言語で書けばこんな感じ?

char *boolString (char YesNo)
{
  if (YesNo == 0) {
    return ("No");
  } else {
    return ("Yes");
  }
}

/// わかりやすさの為にいろいろ略。以下main関数

printf("%s\n", boolString(0));
printf("%s\n", boolString(1));


対応づけるとわかりやすいと思う。

ちぃ、覚えた。(これが言いたかった)


#今回のコードのうち、1番目のNSStringを返す関数の部分は、Mark Dalrymple, Scott Knaster 著、長尾高弘 訳の「入門 Objective-C 2.0」って本からの引用です。ただし、コメントアウト部分は俺が書き足しました。
また、見た目の問題上コード内に全角スペースを惜しげも無く使っているので、コピペしたままだとコンパイルできません。というかあんまり自信が無いので実行とか試みないことをおすすめします。何があってもこちらは責任を負いません。
スポンサーサイト



プロフィール

津田沼

Author:津田沼

学生です。ドラムとDTMをやっていますが、多分向いていません。Macを使っています。好きなお笑い芸人はさまぁ~ずです。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
Ninjaアクセス解析