前提・実現したいこと
初学者ですが、大学院入試のためにC言語を勉強しています.
コードの内容について分からない箇所があり,教えていただきたいです.
下に載せたF(n,b)という関数について,
(1)この関数はどのような値を返すか (2)この関数が正常に動作するbの最大値を求めよ (3)printf("%s\n",F(428,16))とprintf("%s\n",F(226,4))はそれぞれどのような値を返すか
という問題がありました.
試したこと
問題を解いているときには気づけなかったのですが...
実際に記述して試してみたところ「10進数のnをb進数に置換する」プログラムのようだとわかりました
また文字列のoutbの中身がlまでなのでbの最大値は22(22進数まで変換できる)ともわかりました
(3)についても答えはプログラムを実行することで得られました.
わからないこと
関数Fの中身について次のことが分からず,教えていただきたいです.
- 最初のstaticも含めてiが何を表しているのか
符号つきの2進数のように符号を表しているのかと思いましたが,それらは表示されないのでしょうか?
また,66を最上位だと思うと,i=65がどうなっているのか疑問です
- outb[i]の右辺がどうなっているのか
"0123456789abcdefghijkl"[n%b]という箇所はどのような動作をするのでしょうか.
また教本には同様の例が載っておらず,このようにクォーテーションで囲まれた配列に名前があれば教えていただけるとありがたいです
- なぜ最後にreturnするのが&out[i+1]なのか
コードから実際に&をとるとエラーが出てしまいますが,ポインタでは文字列のアドレスが表示されてしまうのではないでしょうか?
文字列もポインタ?のような感じがするのでポインタのポインタのような印象を受けてしまい,困惑しています.
お手数ですが上の3点について教えていただけるとありがたいです.お願いします.
該当のソースコード
C
1#include<stdio.h> 2 3char* F(int n,int b){ 4 static char outb[66] = {0}; 5 int i = 64; 6 for(; n>0 && i>0 ; --i,n /= b) outb[i] = "0123456789abcdefghijkl"[n%b]; 7 return &outb[i+1]; 8} 9 10int main(){ 11 printf("%s\n",F(428,16)); 12 printf("%s\n",F(226,4)); 13 return 0; 14}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/05 08:36
退会済みユーザー
2019/08/05 11:49