出産前後の痔にはご注意!

いろいろな参考例を見ながら、下記ようにポインタには、アドレスを格納できることは、わかったのですが、点線の以降の内容がよくわかりませんでした。strには、&をつけていないのですが、これでアドレス格納となるのでしょうか?配列はとくしゅなのでしょうか?p_chr = &str;と書いてはだめなのでしょうか?

int num = 1; // int型変数
int *p_num; // int型ポインタ変数
p_num = # // ポインタ変数p_numに変数numアドレスを代入

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
char str[] = "Hello";
char *p_chr; // char型ポインタ変数

// ポインタにアドレスを代入
p_chr = str;

A 回答 (3件)

C には


「配列型のオブジェクト」を使うと, 特定の状況を除いて「その配列の先頭要素のアドレス」に変換される
という規則があります. で, 今の場合はその「特定の状況」にはあてはまらないので, 配列型のオブジェクトである str はその先頭要素のアドレスに変換されます.

なお, 非常に困ったことに
p_chr = &str;
も文法エラーではなく, しかも今の場合には
p_chr = str;
と結果的に同じ動作になってしまいます. とはいえ
p_chr = &str;
は両辺の型が違うので書くべきではありません.
    • good
    • 1

>p_chr = &str;と書いてはだめなのでしょうか?



&を付けて書くなら以下のように。
p_chr = &str[0];

"Hello"が格納されている文字列の先頭文字'H'のアドレスを格納します。
&str[1]なら2文字目の'e'のアドレスを格納…という具合になります。
    • good
    • 0

C言語では


・XX型の配列の名前だけ使ったとき、(多くの場合で)その先頭要素へのポインタ(XX *)として扱う
というルールがあります。

char str[] は char型の配列なので、 名前だけ使ったとき(strだけ使ったとき)、char型へのポインタ(char *) である &(str[0]) として扱われます。


> p_chr = &str;と書いてはだめなのでしょうか?
> char str[] = "Hello";
> char *p_chr; // char型ポインタ変数

この場合、&str は 「charの配列」へのポインタとなります。
p_chr は 「char」へのポインタ です。
型が違います。



ポインタは、アドレスだけでなく、その指すアドレスにある「型」も記憶しています。
&が返すのはポインタなので、これにも「型」が関係します。
「型」を意識するようにしましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング