ページ 11

intと*

Posted: 2010年9月26日(日) 22:17
by blue
問題 
1を入力すると「Jan」、2を入力すると「Fed」というように、そのつきの名前を返すプログラムを文字列の配列を利用して作ってください。

答えのソース↓(//~~の部分は今回わからないところ)

/* program82.c */


#include <stdio.h>

char *mon(int);  //*mon(int *)じゃだめなのか、なぜ(int)なの?

int main()
{
int n;

while (1) {
printf("1-12の数字(0で終了)--- ");
scanf("%d", &n);
if (n == 0)
break;
printf("%s\n", mon(n - 1));
}

return 0;
}

char *mon(int n)  //なぜ*をつけるの?
{
char *month[/url] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"};
return month[n];
}

Re:intと*

Posted: 2010年9月26日(日) 23:36
by やっくん
どの程度理解されているかわかりませんので回答し辛いですが・・・。

mon関数で何をしているか、というのを理解できれば分るかと思います。
mon関数では、1引数で"整数型"の値を受け取りそれに対応した月を"文字列"で返しています。

int*でないのは、関数にポインタで渡す必要が無いからです。
関数で値を書き換えたいわけでもないし、配列を渡したいわけでもないので。

mon関数の戻り値をchar*とするのは関数の目的である文字列を返すからです。