インターフェイスタイプが「NSString」のオブジェクトを値で可変個引数関数に渡すことはできません。フォーマット文字列からの予期されたタイプは「id」でした

つかまっている

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"; なぜこれが起こるのですか、あなたはそれを説明できますか?

Avi

構文*myStringはポインターを逆参照していますmyStringポインタ自体の値を渡すのではなく、ポインタが指すメモリ位置に含まれる値を渡すようにコンパイラに指示します。この例でエラーが発生する理由は、Objective-Cではオブジェクトを値で渡すことができないためです。オブジェクトへのポインタのみを渡すことができます。idエラーメッセージ内のへの参照は、%@フォーマット文字列がオブジェクトの印刷に使用されていることを示しています。オブジェクトに対して何が出力されるかは- description、そのオブジェクトのタイプの実装によって異なります。

charObjective-Cはの値を渡すことに問題がないため作品へのポインタを使用した2番目の例は機能しますchar

質問編集

そのステートメントでは、const属性は、ポインターの値ではなく、ポイントされている値を参照します。その文字列はとにかく変更できないので、実装に関しては、それは実際にはあまり意味がありません。コンパイラの最適化が可能になると思います。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ