繁体   English   中英

C中的函数始终返回相同的任意数

[英]function in C returns always the same arbitrary number

所以我试图获得任何两个数的幂,

int expo(int base, int expon){
    int z = 1;
    printf("%i",&z);  // Here i get 635678
    if (expon == 0){
        printf("A");  // this gets printed if expon== 0
        return 1;
    }
    else{
        for (int x=0; x < expon; x++){ 
            z *= base;
            printf("%i",&z); // here i get 6356780
        }
        return z;
    }

}

最让我惊讶的是第一个678678,我刚刚告诉计算机z = 1 !,第二个是当它打印A时甚至不返回1。它始终返回6356776。(我只是声明一个int值作为函数的结果并打印int,也许我什至做得不好)。 我不在乎此特定功能,我只想知道我要告诉计算机的内容,因为它显然不是我的想法。 谢谢,抱歉,因为这个问题很有可能不存在。

好吧,您这样做是错误的:

printf("%i",&z);

%i用于打印整数,但是您传递的是指向整数指针 -您应用了& (的地址)运算符。

这是未定义的行为。 简单的解决方案:删除&


我有一个理论,您是如何到达此代码的:您可能被教导要使用scanf()来读取输入(我会质疑的另一件事,但现在暂时将其搁置一旁)。

使用scanf() ,您需要使用%i转换说明符将指针传递int 但这是因为scanf()必须设置变量的值,并且像在C语言中一样,变量是通过value传递的 ,这只能通过指针来实现。

另一方面, printf()只需要一个值即可打印,它不需要修改任何内容。 因此,它直接期望该值,而不是指向它的指针。

您正在打印变量z中未包含值z的位置。 如果将&放在变量的前面,则会在内存中获得地址,只需将printf(“%i”,z)放入即可获得其值。

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;
  }
}

只需将&引用运算符放在z前面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM