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

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

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

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

Q&A

解決済

1回答

560閲覧

c言語 関数の参照渡し

masaki5759

総合スコア9

C

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

0グッド

0クリップ

投稿2021/05/19 04:43

問題①int型の配列(要素数5)の要素一つのアドレスを値渡しし、受け取ったアドレスが示す値を表示する関数
②main関数で上記の関数を使って全ての要素を表示する


#include <stdio.h>

void funk (int *a);

int main ()
{
int num[5] ={10,20,30,40,50};

funk(num);

}

void funk (int *a)
{
printf("num : %d\n", *a);

}

実行結果
num : 10


#include <stdio.h>

void funk (int *a);

int main ()
{
int num[5] ={10,20,30,40,50};

int i;

for(i=0; i<5; i++)
{
funk(num[i]);
}

}

void funk (int *a)
{
printf("num : %d\n", *a);

}

①は実行できたのですが、②が実行されません…
どなたかご教授お願い致します????

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

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

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

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

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

K_3578

2021/05/19 07:48

解決済ですが、なんか過去質問で誰も指摘してなかったみたいなので。 ソースコードはMarkDownのcode機能でブロック化してご提示ください。 手っ取り早いのはソースコードをマウスで全選択し、<code>を押すとブロック化するので 「ここに言語を入力」を言語名に入れ替えてください。(C言語なら「C」と書く)
guest

回答1

0

ベストアンサー

funk(num+i);

としましょう

投稿2021/05/19 04:45

y_waiwai

総合スコア87800

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

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

masaki5759

2021/05/19 04:51

改善できました!もし宜しければ、なぜnum +iでうまくいったのか教えていただけると嬉しいです????
y_waiwai

2021/05/19 04:56 編集

> void funk (int *a) funcの引数はintのアドレスを取ります ここに、num[i]を入れてしまうと、数値が入ってしまいます。 なので、 funk(&num[i]); として、アドレスを入れてやるとかしてやる必要があります 回答では、numのアドレスのi番目のアドレス、ってことでこいつも有効です
masaki5759

2021/05/19 05:06

なるほど!私の回答だと値が入ってしまうので、参照渡しの場合は引数のint型のアドレスが指している値を取らなければならないので、アドレスのi番目とすることでfor文で回すと上手くいくということですね!
y_waiwai

2021/05/19 05:08

数値自体(int)か、数値が入ってる場所のアドレス(int*)かってのをイメージできるようにしときましょう #これが難しいんですが
masaki5759

2021/05/19 05:14

参照渡しはアドレスを指す値を取るので配列のアドレスをどう取れるのかってのをイメージするんですね! 本当にありがとうございます!????
ozwk

2021/05/19 05:40 編集

https://teratail.com/questions/189570 のコメント欄のように「C言語の参照渡し」は大論争を引き起こす危険な言葉なので 今回のようなケースは「ポインタ渡し」といったほうが無難です。
Zuishin

2021/05/19 07:47 編集

結構あちこち炎上させてきたので、参照渡しという言葉を目にする人ならだいたい知ってるんじゃないかと思います。現に「参照渡し」でググると、数年前に比べてかなりまともな結果になります。 この質問者は、炎上させようと思ってわざと前の質問から連呼していると思います。
masaki5759

2021/05/19 08:14

申し訳ございません。私はc言語学習始めて2週間ほどの人間でして、値渡しと参照渡しで学習していたので参照渡しと記載しておりました。 以後気をつけたいと思います。 ご指摘ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問