ページ 1 / 1
scanf
Posted: 2009年4月30日(木) 10:52
by 研修生
scanfで
scanf("%s",str);
と
scanf("%s",&str)は前者が適切で後者は前者とは型は違うけど値は同じなので見かけ上はうまくいくように
見えます。このとき何故値は同じになるのでしょうか?
Re:scanf
Posted: 2009年4月30日(木) 11:10
by たかぎ
strの型によります。
Re:scanf
Posted: 2009年4月30日(木) 11:17
by 研修生
今回は
char str[50];となっています
Re:scanf
Posted: 2009年4月30日(木) 12:39
by toyo
指してる場所(アドレス)は同じですが型が違います
str は&str[ 0 ]と同じになるので char* 型
じゃあ&strはchar**型じゃないのかというと実はchar(*)[ 50 ]型
Re:scanf
Posted: 2009年4月30日(木) 12:55
by たかぎ
型に関してはtoyoさんが書かれたとおりです。
厳密なことをいえば、書式指定と実引数の型が矛盾しているので未定義の動作になります。
Re:scanf
Posted: 2009年4月30日(木) 13:18
by 研修生
何故同じ場所を指すのでしょうか?
配列の実装によって変わるような気もするのですが。
Re:scanf
Posted: 2009年4月30日(木) 15:44
by 研修生
残念ながらわかる方がいらっしゃらないので他でご質問します。
ありがとうございました。
Re:scanf
Posted: 2009年4月30日(木) 15:52
by toyo
うまい説明が思いつきませんが
str : 配列の先頭要素のアドレス
&str : 50個の配列の先頭アドレス
配列の先頭アドレスと配列の先頭要素のアドレスは当然同じアドレスになる
でわかりませんかね
Re:scanf
Posted: 2009年4月30日(木) 16:23
by toyo
構造体で例えると
構造体のアドレスと構造体の先頭メンバのアドレスが同じになる
みたいな