C中的函数总是返回相同的任意数

时间:2017-07-07 00:46:05

标签: c function variables

所以我试图获得任意两个数字的力量,

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,也许我甚至做得那么糟糕)。我不关心这个特殊的功能,我只是想知道我告诉电脑的是什么,因为它显然不是我想的。 谢谢,抱歉,因为很有可能这个问题不应该在这里。

3 个答案:

答案 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前面的参考运算符。