[解決済み] char*とchar**の違い(C言語)
2022-03-03 11:08:47
質問
私はこのような単純なコードを書きました。
#include <stdio.h>
#include <string.h>
void printLastLetter(char **str)
{
printf("%c\n",*(*str + strlen(*str) - 1));
printf("%c\n",**(str + strlen(*str) - 1));
}
int main()
{
char *str = "1234556";
printLastLetter(&str);
return 1;
}
さて、文字列の最後の文字を表示したい場合、printLastLetterの最初の行が正しいコードであることは分かっています。よくわからないのは、*strと**strの違いが何なのか、ということです。最初のものは文字の配列で、2番目は? また、char *strとstr[10]のメモリ割り当ての違いは何でしょうか? ありがとうございます。
解決方法は?
char*
はcharへのポインタです。
char **
はcharへのポインタへのポインタです。
char *ptr;
は文字のためのメモリを確保するのではなく、char へのポインタのためのメモリを確保します。
char arr[10];
は10文字を確保し
arr
は最初の文字のアドレスを保持します。(ただし
arr
はポインタではありません(not
char *
という型である。
char[10]
)
デモ用です。
char *str = "1234556";
のようなものです。
char *str; // allocate a space for char pointer on the stack
str = "1234556"; // assign the address of the string literal "1234556" to str
として
オーリ・チャールズワース
のコメント通り、上記の例のように定数文字列へのポインタを使用する場合、ポインタの宣言は
const
-
const char *str = "1234556";
ということで、禁止されている改造をしようとすると、セグメンテーションフォルトなどのランタイムアクセス違反エラーではなく、コンパイルタイムエラーが発生することになります。よくわからないという方は、以下をご覧ください。
こちら
.
こちらもご覧ください ニュースグループ comp.lang.c の FAQ にある説明です。 .
関連
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み】配列型char[]が代入できない [重複]。
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] char s[]とchar *sの違いは何ですか?
-
[解決済み】Bashでファイル名と拡張子を抽出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C言語におけるファイルスコープでの可変長配列の変更
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】EAGAINとはどういう意味ですか?
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み】インクリメントオペランドとして lvalue が必要です。
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】execvp: バッドアドレスエラー
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない