このプログラムは、3 桁の数字を取り込んで回文に変換することになっています。123
になり321
ます。
ロジックは正しく、プログラムは正しくコンパイルされます。:) ただし、これらのロジックは簡単にはわかりません。
私の教授は「スタック図」を使って物事を説明していますが、私はそれらが役に立つと思います. このプログラムと私が作成した別のプログラムとの類似性に気付いたので、別のプログラムに基づいてこのプログラムを作成しましたが、ポインティングはどのように機能しますか?
#include <stdio.h>
void reverse_number(int in_val, int *out_val) {
int ones, tens, hundreds;
ones = in_val % 10;
tens = (in_val % 100 - ones) / 10;
hundreds = (in_val - (ones + tens)) / 100;
*out_val = (ones * 100) + (tens * 10) + hundreds;
}
int main() {
int in_val;
int out_val;
printf("Give a three digit num to reverse: \n");
scanf("%d", &in_val);
reverse_number(in_val, &out_val);
printf("New number is: %d \n", out_val);
return 0;
}
また、これらのポインターを使用して一種のテンプレートに基づいてプログラムを作成する方法を理解し始めており、パラメーター内のスターが何を意味するか (ポインター変数として宣言されている) を非常に基本的に理解しています。
たとえば、変数に別の変数のアドレスをm = &q;
与えることは知っていますが、それはアドレスの値が入ることを意味しますが、関数とメインファイルのコンテキストでこれらがどのように機能するかについては本当によくわかりません.m
q
m = *g;
g
m
誰かが (このプログラムで) それがどのように機能するかの基本的なロジックを説明できれば、それは素晴らしいことです. 数学専攻として、私は数学の操作などを理解できますが、ポインターは混乱していませんが、変数のアドレスなどを処理する必要なしにそれを行う方法があるように思えます.