[英]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.