【发布时间】:2011-10-21 23:27:58
【问题描述】:
这个程序应该接受一个三位数并将其更改为回文。 123 将变为 321。
逻辑正确,程序编译正确。 :) 然而,这些的逻辑来之不易。
我的教授用“堆栈图”解释了一些事情,我发现它们很有帮助。我基于另一个程序创建了这个程序,因为我注意到它和different program I made 之间的相似之处,但是指向是如何工作的呢?
#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,但是我真的不熟悉这些在函数和主文件的上下文中是如何工作的。
如果有人能够阐述它(在这个程序中)如何工作的基本逻辑,那就太棒了。作为一名数学专业的学生,我可以理解数学和东西的操作,但指针并没有让我感到困惑,但在我看来,有一些方法可以做到这一点,而无需处理变量的地址等。
【问题讨论】:
-
哦,天哪,在编辑这个问题和在程序编译的编译器中编辑程序之间。我的错。我应该删除问题吗?
-
许多数据结构,如链表和树,如果不使用指针就无法创建。指针令人困惑——但它们并非无用。
-
编辑您的问题以询问其工作原理:)
-
@Arthur Well 堆栈溢出背后的想法是提供集体知识。我会把它留在这里,因为下线的人可能会在搜索中找到它,并且证明对他们有用。另一种选择是看看你是否能找到它没有编译的原因,并将你的解决方案作为答案发布。
-
您使用什么系统/编译器?使用 Linux/gcc 它可以编译并运行正常。
标签: c pointers palindrome