X-Codeで次のコードを書きました。
NSString *myString = @"testString";
NSLog(@"*myString = %@", *myString);
次のエラーが発生しました。
インターフェイスタイプが「NSString」のオブジェクトを値で可変個引数関数に渡すことはできません。フォーマット文字列からの予期されたタイプは「id」でした
誰かがそれが何を意味するのか教えてもらえますか?「* myString」は何の略ですか?ご存知のように、以下のようなコードを記述してもエラーはありません。
char testchar = 'f';
char *char1 = &testchar;
NSLog(@"*char1 = %c",*char1);
NSStringがこの場合のように書き込めないのはなぜですか?
@Avi、あなたの説明に感謝します、元々、私が聞きたいのは私が以下の宣言と定義を見たということです:
NSString const *BNRNextItemValuePrefsKey1 = @"NextItemValue";
私の理解では、BNRNextItemValuePrefsKey1は定数@ "NextItemValue"へのポインターですが、以下を実行してもエラーは発生しません。BNRNextItemValuePrefsKey1= @ "jijijij"; なぜこれが起こるのですか、あなたはそれを説明できますか?
構文*myString
はポインターを逆参照していますmyString
。ポインタ自体の値を渡すのではなく、ポインタが指すメモリ位置に含まれる値を渡すようにコンパイラに指示します。この例でエラーが発生する理由は、Objective-Cではオブジェクトを値で渡すことができないためです。オブジェクトへのポインタのみを渡すことができます。id
エラーメッセージ内のへの参照は、%@
フォーマット文字列がオブジェクトの印刷に使用されていることを示しています。オブジェクトに対して何が出力されるかは- description
、そのオブジェクトのタイプの実装によって異なります。
char
Objective-Cはの値を渡すことに問題がないため、作品へのポインタを使用した2番目の例は機能しますchar
。
質問編集
そのステートメントでは、const
属性は、ポインターの値ではなく、ポイントされている値を参照します。その文字列はとにかく変更できないので、実装に関しては、それは実際にはあまり意味がありません。コンパイラの最適化が可能になると思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加