ページ 1 / 1
配列の演習問題について
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 たかぎ
失礼。
> > しかし、そんな保証はないです。
> 保証はされます。
こちらは未定義ですね。