- ベストアンサー
ポインタのプログラムについて
- ポインタのプログラムについて質問があります。実際にプログラムを作成してみたところ、maxの値が4だと間違いと言われました。正しいmaxの値を教えてください。
- 配列idataが1000番地から格納されている状況で、ポインタのプログラムを実行しています。表示結果*8**~*10**の箇所で、正しく計算された値のみ表示させたいです。
- プログラム中のポインタに関する処理を行っています。計算された値のみ表示するための正しいmaxの値を教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
No. 2です。 あらら~ > 8~10の前でipを最後に決めたのは、ip=&idata[2] というのを完全に見落としていました。 このコードの通りなら、max = 4; で良さそうですけどね。 でも、せっかくですから、ここを変えると何が起こるか試すのは無駄ではないとは思います。
その他の回答 (6)
- kmee
- ベストアンサー率55% (1857/3366)
やはり「正しく計算された値のみ表示させる」が理解不能です。 理屈から言えば、 このプログラムでmaxにどんな値(負が入ると、forループが1つも回らないのでだめですが)が入っても、 *(ip+i)自体は「正しく計算」されます。 意味不明な値だとしても、 ip+iのアドレスにあるデータを(int型と解釈して)正しく取り出したものです。 ip+iがアクセスできないアドレスになって、*(ip+i)で領域エラーになる、ということはあるかもしれませんが、計算自体が違うわけではないし。 通常の使い方で考えれば、idataの最後の要素まで、ということになります。 が、それだとmax=4で正しいはずです。 特定の環境に限れば > int iv,idata[]={2,4,6,8,10,12},*ip,i,max; と宣言すると、連続した領域に確保されるので、 変数maxのアドレスまでは確実にアクセスできる.....という考えも可能ですが、違う環境では成り立ちません。 > for(i=0;i<max;i++){ この i<maxが i<=max が正しい、とかは無いですよね? 「値は4で正しいけど、それの根拠がわかってないから『間違い』」とされてしまった、ということは無いですよね?
- okormazd
- ベストアンサー率50% (1224/2412)
要するに、8~10で、idataのサイズをはみ出さずに、正しくidataを表示するポインタip+iの最大のiが いくつなんだと言っているんじゃないかと。 8~10の前でipを最後に決めたのは、ip=&idata[2] だから、ipは3番目の要素を指している。それから4つ増えれば、要素はないから、増やせるのは3まで。 for(i=0;i<max;i++) といっているから、max=4でいいと思うが、誰に「間違いと言われた」のだろう。 あと、なにも計算していないから、思い当たる節はないな。 「表示される値を余白に記述せよ」というのが間違っていたりしないだろうね。 *1*ivの値=2 *2*ipの値=1000 *3*ipの値=1004 *4*ipの値=1008 *5*ivの値=6 *6*ivの値=9 *7*ivの値=12 *8**(ip+0)=0 *8**(ip+1)=8 *8**(ip+2)=10
- Tacosan
- ベストアンサー率23% (3656/15482)
「正しく計算された値」というからには ・何らかの計算があって ・「正しく計算された値かどうか」が判定できる ということか? そもそも「何を計算したのか」すら, 問題からは読み取れんのだが....
- yumeno_kira
- ベストアンサー率72% (8/11)
> 根拠はないんですが、解答欄が小さかったのであまり大きな数値を入れてしまうと書ききれないからです。 質問にある「実際にプログラムを作ってみてmaxの箇所を4にしてみた」は嘘だったのですか? 本当は、「やってみて正しいそうな結果になった数値」じゃ良くはないのですが、解答欄に「4」と書けたというのなら、少なくとも、一桁の数字は候補になるわけですよね。 せめて「実際にプログラムを作ってみて」試してみましょう。 その後、なぜそうなるのか考えるのでも良いかもしれません。
- yumeno_kira
- ベストアンサー率72% (8/11)
そうですね、実際に動かしてみて、max は4だと思ったと言うことですから、「なぜ4だと思ったのか」言い換えると、3や6やそのほかだと、どうなったから、だめだと思ったかと、その説明がまず必要かなと思います。 実際、8~10 の部分、値も表示されていますから、それがどこから来たのかわかれば、実際にやってみるでも、多分、正しい値に到達するでしょう。
- asuncion
- ベストアンサー率33% (2127/6289)
>maxの箇所を4にしてみた なぜ、そのようにしてみましたか?
補足
根拠はないんですが、解答欄が小さかったのであまり大きな数値を入れてしまうと書ききれないからです。