質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

6205閲覧

C言語 配列にscanf関数で格納する際、なぜ&をつけなければいけないか?

infra____

総合スコア90

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/08/21 06:08

以下、プログラムは『解きながら学ぶc言語』のp112のプログラムを一部改変したものです。
配列に値を格納して、逆順に並び替えた上で、出力するプログラムです。
char型の配列にリテラルを格納する際は、&を記述しなくてもエラーが起きません。
しかし、なぜint型の配列に格納する際に、&を記述しないとエラーになるのですか?

#include <stdio.h> int main(void){ int ary[7]; int i; //配列に値を格納 for(i=0;i<7;i++){ printf("ary[%d]:",i); scanf("%d",&ary[i]);//質問箇所 } //配列を逆順に並べ替え for(i=0;i<3;i++){ int temp=ary[i]; ary[i]=ary[6-i]; ary[6-i]=temp; } //並べ替え後の配列を表示 for(i=0;i<7;i++){ printf("ary[%d]=%d\n",i,ary[i]); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

値を入れるには、変数の内容ではなく変数の場所が必要であるというのが大前提です。 常にポインタを渡さなければなりません。

配列の場合には「配列は (一部の例外を除いて) その先頭要素を指すポインタに暗黙に型変換される」というルールがあるので & を付けていないように見えても場所 (ポインタ) を渡していることになります。

投稿2020/08/21 06:19

SaitoAtsushi

総合スコア5675

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

infra____

2020/08/21 06:36

回答ありがとうございます。 とても分かりやすかったです。 引続きよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問