私は初心者プログラマーで、母国語である C を学んでいます。
私は主に Deitel と Deitel の C How to Program の本から学んでいますが、大学のサンプルタスクやものも使用していますが、1 つにこだわっています。
私はポインターの非常に基本的な理解を持っています-変数の前に & を追加するとアドレスが出力され、 * ポインターを使用してそのアドレスなどに格納されている値が使用されます。
私が書いたコードは、2 つの数値の最大 (最大?) 公分母を計算するためのものであり、実際にはポインターを必要とせず、まったく必要としません。2 つの関数を使用しており、メインに戻すのではなく、2 番目の関数から実行すると正しい答えが画面に出力されるため、ロジックはすべて正しいです。ここに問題があります。
2 番目の関数が応答値を返すとき、何らかの理由で、ポインターであるとしか想定できないものを返します。なぜこれを行うのかわかりません。これを操作して値を検索するように変換することはできますが、2 番目の関数のローカル ポインターのようであり、上書きされます。私が見つけることができるウェブ上や私の本の中には、問題を解決する方法を教えてくれるものは何もありませんでした.
ここまで読んでくれてありがとう。ぶらぶらしすぎました。
これが私のコードと出力です。ヘルプやポインタ(しゃれを許して)をいただければ幸いです。2番目の関数で出力するだけでよいことはわかっていますが、希望する値を返さない方法と理由を知りたいです。
コード
#include <stdio.h>
int greatestCD (int num1, int num2);
int main(void)
{
int a=0, b=0;
int result;
printf("Please enter two numbers to calculate the greatest common denominator from\n");
scanf("%d%d", &a, &b);
result = greatestCD (a,b);
printf("Using the correct in main way:\nThe greatest common denominator of %d and %d is %d\n",a,b, result);
}
int greatestCD (int num1 ,int num2)
{
if (num2==0){
printf("Using the cheaty in gcd function way:\nThe greatest common denominator is %d\n",num1);
return num1;
} else {
greatestCD(num2,(num1%num2));
}
}
出力 (12 と 15 を使用 - 答えは 3 である必要があります)
C:\Users\Sam\Documents\C programs>gcd
Please enter two numbers to calculate the greatest common denominator from
12
15
Using the cheaty in gcd function way:
The greatest common denominator is 3
Using the correct in main way:
The greatest common denominator of 12 and 15 is 2293524
frankodwyer からのこのような単純なソリューション。それは私が見つけられない、または知らないような小さなものです。では、返されたのはポインターではなく、ただのジャンクだったのでしょうか?
どうもありがとう。