scanf

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
研修生

scanf

#1

投稿記事 by 研修生 » 16年前

scanfで
scanf("%s",str);

scanf("%s",&str)は前者が適切で後者は前者とは型は違うけど値は同じなので見かけ上はうまくいくように
見えます。このとき何故値は同じになるのでしょうか?

たかぎ

Re:scanf

#2

投稿記事 by たかぎ » 16年前

strの型によります。

研修生

Re:scanf

#3

投稿記事 by 研修生 » 16年前

今回は
char str[50];となっています

toyo

Re:scanf

#4

投稿記事 by toyo » 16年前

指してる場所(アドレス)は同じですが型が違います
str は&str[ 0 ]と同じになるので char* 型
じゃあ&strはchar**型じゃないのかというと実はchar(*)[ 50 ]型

たかぎ

Re:scanf

#5

投稿記事 by たかぎ » 16年前

型に関してはtoyoさんが書かれたとおりです。
厳密なことをいえば、書式指定と実引数の型が矛盾しているので未定義の動作になります。

研修生

Re:scanf

#6

投稿記事 by 研修生 » 16年前

何故同じ場所を指すのでしょうか?
配列の実装によって変わるような気もするのですが。

研修生

Re:scanf

#7

投稿記事 by 研修生 » 16年前

残念ながらわかる方がいらっしゃらないので他でご質問します。
ありがとうございました。

toyo

Re:scanf

#8

投稿記事 by toyo » 16年前

うまい説明が思いつきませんが
str : 配列の先頭要素のアドレス
&str : 50個の配列の先頭アドレス
配列の先頭アドレスと配列の先頭要素のアドレスは当然同じアドレスになる

でわかりませんかね

toyo

Re:scanf

#9

投稿記事 by toyo » 16年前

構造体で例えると
構造体のアドレスと構造体の先頭メンバのアドレスが同じになる
みたいな

閉鎖

“C言語何でも質問掲示板” へ戻る