ページ 11

配列の演習問題について

Posted: 2010年6月03日(木) 01:18
by hiroboh
初めまして、最近C言語の勉強を始めました。hirobohと言います。
プログラム言語は今まで触ったこともありません。よろしくお願いします。

C言語の参考書を買ったのですが、演習問題の解答が載っておらず
よろしければ答えを見て頂きたいと思い、投稿しました。

コンパイラは GNU C(OSはLinux)と記載されていました。

次のプログラムは10+20の結果を画面に表示するプログラムです。

#include <stdio.h>
int main()
{
int a[3]

a[0] = 10
a[1] = 20
a[2] = a[0] +a[1];

printf("%d,¥n",a[2]);
return 0;
}

よろしくお願いします。

Re:配列の演習問題について

Posted: 2010年6月03日(木) 01:21
by たかぎ
変わった書き方ですが、間違ってはいないと思います。
一点気になるのは、

> printf("%d,¥n",a[2]);

¥ではなく、\です。
Linuxの場合、EUCを使う場合でもUTF-8を使う場合でも、円記号ではなく逆斜線として表示されるはずです。

Re:配列の演習問題について

Posted: 2010年6月03日(木) 01:29
by hiroboh
早い解答ありがとうございます。
間違っていなくて安心しました。

¥は\と表すのですね、覚えておきます。

Re:配列の演習問題について

Posted: 2010年6月03日(木) 01:43
by たかぎ
もう一点、見落としていました。

> int main()

ここは、

int main(void)

と書きましょう。

Re:配列の演習問題について

Posted: 2010年6月03日(木) 02:19
by hoge
> > int main()
>
> ここは、
>
> int main(void)
>
> と書きましょう。
>

これは何故でしょう?

どちらでも同じ意味ではないでしょうか。

Re:配列の演習問題について

Posted: 2010年6月03日(木) 02:31
by たかぎ
> どちらでも同じ意味ではないでしょうか。

違います。

int main()
{
main(0, 0);
return 0;
}

はコンパイルできますが、

int main(void)
{
main(0, 0);
return 0;
}

はコンパイルできません。
つまり、意味が異なるということです。

Re:配列の演習問題について

Posted: 2010年6月03日(木) 03:03
by hoge
> 違います。
>
> int main()
> {
> main(0, 0);
> return 0;
> }
>
> はコンパイルできますが、

確かにGCCでは、コンパイルできますね。

しかし、そんな保証はないです。
関数定義(プロトタイプ宣言でない)で仮引数並びが空の場合、その関数は、仮引数をもたないことを意味します。
そして、仮引数の数と実引数の数が異なる関数呼出しをした場合の動作は、未定義です。

Re:配列の演習問題について

Posted: 2010年6月03日(木) 05:32
by toyo
気になって調べてみたらCでは(C++ではなく)引数を省略したら可変引数になるような記事がありました
func( )はfunc(...)とみなされるという意味です
渡された引数にアクセスする手段はなさそうですが
C++ではfunc( )とfunc(void)は同じ意味になります

Re:配列の演習問題について

Posted: 2010年6月03日(木) 07:51
by たかぎ
> しかし、そんな保証はないです。

保証はされます。

> 関数定義(プロトタイプ宣言でない)で仮引数並びが空の場合、その関数は、仮引数をもたないことを意味します。

仮引数はありませんが、それはvoidを指定した場合と等価ではありません。

Re:配列の演習問題について

Posted: 2010年6月03日(木) 08:11
by たかぎ
失礼。

> > しかし、そんな保証はないです。
> 保証はされます。

こちらは未定義ですね。