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

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

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

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

Q&A

解決済

1回答

3453閲覧

C言語 ポインタ引数

ryo_py

総合スコア25

C

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

0グッド

0クリップ

投稿2017/11/28 13:39

C言語でポインタ引数を用い、*qに商を、 *rに剰余を求めたい。
dividend(被除数)divisor(除数)
qu (商) re (剰余)

C言語

1#include <stdio.h> 2#include <stdlib.h> 3void quorem(int a, int b, int *q, int *r); 4int main(int argc, char *argv[]) { 5 int dvnd, dvsr; 6 int quo, rem; 7 if (argc<3) { 8 printf("At least 2 arguments required!\n"); 9 exit(-1); 10 } 11 12 dvnd = atoi(argv[1]); 13 dvsr = atoi(argv[2]); 14 quorem(dvnd, dvsr, quo, rem); 15 printf("quotient : %d\n", quo); 16 printf("remainder: %d\n", rem); 17 return 0; 18} 19void quorem(int a, int b, int *q, int *r) { 20 *q = a / b; 21 *r = a % b; 22 return; 23} 24 25/* 以下のエラーが出てしまいます。 */ 26 27ex03.c: In function 'main': 28ex03.c:15:21: warning: passing argument 3 of 'quorem' makes pointer from integer without a cast [-Wint-conversion] 29 quorem(dvnd, dvsr, quo, rem); 30 ^ 31ex03.c:4:6: note: expected 'int *' but argument is of type 'int' 32 void quorem(int a, int b, int *q, int *r); 33 ^ 34x03.c:15:26: warning: passing argument 4 of 'quorem' makes pointer from integer without a cast [-Wint-conversion] 35 quorem(dvnd, dvsr, quo, rem); 36 ^ 37ex03.c:4:6: note: expected 'int *' but argument is of type 'int' 38 void quorem(int a, int b, int *q, int *r);

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

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

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

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

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

guest

回答1

0

ベストアンサー

C

ex03.c:15:21: warning: passing argument 3 of 'quorem' makes pointer from integer without a cast [-Wint-conversion]
quorem(dvnd, dvsr, quo, rem);
^
ex03.c:4:6: note: expected 'int *' but argument is of type 'int'
void quorem(int a, int b, int *q, int *r);
^

メッセージそのままです。ポインタ型の引数なのだから、整数を渡すなと書いてあります。
quo、remそれぞれのアドレスを渡すようにしてください。


ちなみにこれはエラーではなく警告です。
実行時におおかた落ちるでしょうが、実行ファイル自体は作られています。

投稿2017/11/28 13:42

編集2017/11/28 13:47
LouiS0616

総合スコア35660

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

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

ryo_py

2017/11/28 14:06

なぜポインタ型の引数だと整数を渡せないのでしょうか? 基本的な質問でごめんなさい。
LouiS0616

2017/11/28 14:13 編集

ポインタ型も整数型も、数値を保管しているという点では同じですので、コンパイル自体は出来ます。 しかし、これらは役割が異なります。 整数型変数が整数を保管するのに対して、ポインタ型変数はデータのアドレスを保管します。 変数のアドレスを取得する単項演算子がありますので、それを利用してください。 参考書だと、『アドレス演算子』とそのまま呼ばれているかと思います。
ryo_py

2017/11/28 14:18

ありがとうございます。 理解できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問