所以我试图获得任意两个数字的力量,
const eloader = require('eloader');
const db = require('db');
eloader.add('db', db)
.add('list', [2,8]
.run(__dirname + '\\routes\\');
最令我惊讶的是第一个635678,我只是告诉电脑z = 1!,第二个是当它打印A时,它甚至不返回1.它总是返回6356776。(我只是声明一个int值作为函数的结果并打印int,也许我甚至做得那么糟糕)。我不关心这个特殊的功能,我只是想知道我告诉电脑的是什么,因为它显然不是我想的。 谢谢,抱歉,因为很有可能这个问题不应该在这里。
答案 0 :(得分:2)
嗯,你这样做错了:
printf("%i",&z);
%i
用于打印整数,但您传递的是指向整数的指针 - 您应用&
(地址)运算符。
这是未定义的行为。简单的解决方案:删除&
。
我有一个理论,你是如何得到这个代码的:你可能被教过用scanf()
来阅读输入(另一件事我would question,但是现在让我们把它放在一边)
使用scanf()
,您需要使用int
转换说明符将指针传递给%i
。但那是因为scanf()
必须设置变量的值,而在C中,变量是通过值传递,这只能通过指针实现。
printf()
只需要打印一个值,它不需要修改任何内容。所以它直接期望这个值,而不是指向它的指针。
答案 1 :(得分:0)
您正在打印变量z的内存中的位置,而不是z包含的值。如果你把&在变量前面你得到了内存中的地址,只需要输入printf(“%i”,z)来获取它的值。
答案 2 :(得分:0)
printf("%i",&z);
在这里,您打印的是z的地址,而不是它的值。你想要的是:
int expo(int base, int expon){
int z = 1;
printf("%d",z);
if (expon == 0){
printf("A"); // this gets printed if expon== 0
return 1;
}
else{
for (int x=0; x < expon; x++){
z *= base;
printf("%d",z);
}
return z;
}
}
放下&amp; z前面的参考运算符。