Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用“按引用调用”计算数字的幂 #包括 无效幂(int*x,int*y); int main() { int m,n; printf(“输入数字和功率:-”); scanf(“%d%d”,&m,&n); 电源(m&n); } 无效幂(int*x,int*y) { int i,结果=1; 如果(*y==0) printf(“结果=1”); 其他的 { 对于(i=0;i_C_Pass By Reference - Fatal编程技术网

使用“按引用调用”计算数字的幂 #包括 无效幂(int*x,int*y); int main() { int m,n; printf(“输入数字和功率:-”); scanf(“%d%d”,&m,&n); 电源(m&n); } 无效幂(int*x,int*y) { int i,结果=1; 如果(*y==0) printf(“结果=1”); 其他的 { 对于(i=0;i

使用“按引用调用”计算数字的幂 #包括 无效幂(int*x,int*y); int main() { int m,n; printf(“输入数字和功率:-”); scanf(“%d%d”,&m,&n); 电源(m&n); } 无效幂(int*x,int*y) { int i,结果=1; 如果(*y==0) printf(“结果=1”); 其他的 { 对于(i=0;i,c,pass-by-reference,C,Pass By Reference,您明显有一个溢出,您的int可能位于32位 使用long: #include <stdio.h> void power(int *x,int *y); int main() { int m,n; printf("Enter the number and power :-"); scanf("%d%d",&m,&n); power(&m,&n); } void

您明显有一个溢出,您的
int
可能位于32位

使用
long

#include <stdio.h>

void power(int *x,int *y);
 
int main()

{

    int m,n;
    printf("Enter the number and power :-");
    scanf("%d%d",&m,&n);
    power(&m,&n);
    
}

void power(int* x, int* y)

{

    int i,result=1;
    if(*y==0)
        printf("The result = 1");
    else
    {
        for(i=0; i<*y; i++)
        {
            result *= (*x);
        }
        printf("The result of %d^%d = %d",*x,*y,result);
    }
}

为了确保使用64b int,您可以使用
int64\t

您明显有溢出,可能是您的
int
位于32位

使用
long

#include <stdio.h>

void power(int *x,int *y);
 
int main()

{

    int m,n;
    printf("Enter the number and power :-");
    scanf("%d%d",&m,&n);
    power(&m,&n);
    
}

void power(int* x, int* y)

{

    int i,result=1;
    if(*y==0)
        printf("The result = 1");
    else
    {
        for(i=0; i<*y; i++)
        {
            result *= (*x);
        }
        printf("The result of %d^%d = %d",*x,*y,result);
    }
}

为了确保使用64b int,您可以使用
int64\t
您正在使用
int
作为结果,但它不适合。您需要使用
long
int
的大小为32位,最大有符号值为2147483647。

您正在使用
int
作为结果,但它不适合。您需要使用
int>long
int
的大小为32位,最大有符号值为2147483647。

给定的程序使用4字节整数,该整数能够保存-2147483648到2147483647之间的值,但10^10太大,无法保存

选择合适的类型(例如
long
)来保存如此大的结果将很容易解决您的问题(注意注释作为对代码的解释):


也可以工作。

给定的程序使用4字节整数,该整数能够保存-2147483648到2147483647之间的值,但10^10太大,无法保存

选择合适的类型(例如
long
)来保存如此大的结果将很容易解决您的问题(注意注释作为对代码的解释):



也可以使用。

您是否尝试过在调试器中逐行运行代码,同时监视所有变量的值?如果没有,则您可能希望阅读以下内容:您可能还希望阅读以下内容:如果出现溢出,请将
int
替换为
long
int64\t
,以确保获得正确的结果10^10不适合32位
int
变量。忽略溢出的UB…
(10*10*10*10*10*10*10)%(2^32)=1410065408
=>
10^10=2*4294967296+1410065408
在C中,没有通过引用调用这样的事情。在监视所有变量的值时,您是否尝试过在调试器中逐行运行代码?如果没有,那么您可能需要阅读以下内容:您可能还需要阅读以下内容:您有一个溢出,请将
int
替换为
long-long
int64\t
以确保获得正确的结果10^10不适合32位
int
变量。忽略溢出的UB…
(10*10*10*10*10*10*10)%(2^32)=1410065408
=>
10^10=2*4294967296+1410065408
在C中,没有引用调用。是的,但是
long
也可能是32位:使用
long
@WeatherVane是正确的。例如,在Microsoft Windows平台上,
long
是32位,而不是64.32位是最小保证大小of
long
。谢谢!我希望它是一辆930!这是一辆1986年的卡雷拉,3.2升。@rallen911啊,那是一辆涡轮增压车;-)是的,但是
long
也可能是32位:使用
long
@WeatherVane是正确的。例如,在Microsoft Windows平台上,
long
是32位,而不是64.32位是
long
的最小保证大小。谢谢!我希望它是930!这是一辆1986年的卡雷拉,配备了3.2L。@rallen911啊,那是一款turbo外观-)我想你不需要使用
long
来传递基函数和幂函数。在这里使用整数可以节省内存。@RohanBari我承认我做了一个懒惰的全局更改,无论如何,使用大数字的运算基函数可能需要一个long而不会产生溢出,因为功率足够小,为什么不使用基函数0和一个幂函数呢我想你不需要使用
long-long
来传递基数和幂。在这里使用整数可以节省内存。@RohanBari我承认我做了一个懒惰的全局更改,不管怎样,使用大数字的OP基数可能需要一个long-long而不会产生溢出,因为功率足够小,为什么不使用base 0和电源需要较长的时间(太长?:-)
pi@raspberrypi:/tmp $ gcc -Wall p.c
pi@raspberrypi:/tmp $ ./a.out
Enter the number and power :-10 10
The result of 10^10 = 10000000000pi@raspberrypi:/tmp $ 
#include <stdio.h>

// The function signature
void power(int *x, int *y);

int main(void) {
    int bs, pw;
    
    printf("Enter the value of base and power: ");

    // Verifying the inputs
    if (scanf("%d%d", &bs, &pw) != 2)
        // If the values were incorrectly entered, then it returns
        // with an error code without further actions
        return 1;
        
    power(&bs, &pw);
    
    return 0;
}

// The function definition    
void power(int *x, int *y) {
    long long result = 1;

    // Dereferencing and using assignment operator for self-multiplication with
    // the dereferenced 'x'
    for (int i = 0; i < *y; i++)
        result *= *x;
    
    printf("Results: %lld\n", result);
}
Enter the value of base and power: 10 10
Results: 10000000000