配列の演習問題について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hiroboh

配列の演習問題について

#1

投稿記事 by hiroboh » 15年前

初めまして、最近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:配列の演習問題について

#2

投稿記事 by たかぎ » 15年前

変わった書き方ですが、間違ってはいないと思います。
一点気になるのは、

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

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

hiroboh

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

#3

投稿記事 by hiroboh » 15年前

早い解答ありがとうございます。
間違っていなくて安心しました。

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

たかぎ

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

#4

投稿記事 by たかぎ » 15年前

もう一点、見落としていました。

> int main()

ここは、

int main(void)

と書きましょう。

hoge

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

#5

投稿記事 by hoge » 15年前

> > int main()
>
> ここは、
>
> int main(void)
>
> と書きましょう。
>

これは何故でしょう?

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

たかぎ

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

#6

投稿記事 by たかぎ » 15年前

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

違います。

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

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

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

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

hoge

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

#7

投稿記事 by hoge » 15年前

> 違います。
>
> int main()
> {
> main(0, 0);
> return 0;
> }
>
> はコンパイルできますが、

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

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

toyo

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

#8

投稿記事 by toyo » 15年前

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

たかぎ

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

#9

投稿記事 by たかぎ » 15年前

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

保証はされます。

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

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

たかぎ

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

#10

投稿記事 by たかぎ » 15年前

失礼。

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

こちらは未定義ですね。

閉鎖

“C言語何でも質問掲示板” へ戻る