【问题标题】:not entirely sure what I'm doing wrong with my return不完全确定我的回报做错了什么
【发布时间】:2021-03-08 06:47:01
【问题描述】:

首先,请注意这是一个更大系统的一部分,这只是隔离一个部分,这就是使用指针的原因。 我假设我试图打印的 powerArgs 回报有问题。虽然我不完全确定出了什么问题

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double* powerArgs(int*, int*);
int main() 
{
 int parmA, parmB;
 int parma, parmb; 
 printf("Enter 2 integers ");
 scanf("%d %d", &parmA, &parmB);
printf("%d raised to the %d power is ",parmA,parmB);
printf("%.0lf \n", *powerArgs(&parmA, &parmB));
}
double* powerArgs(int*a, int*b)
{
    int T=*a;
    int L=*b;
    int t;
    t=pow(T,L);
    return t;
    
}

运行后我得到一个错误,上面写着 警告:return 从整数中生成指针而不进行强制转换 [-Wint-conversion]
和 分段错误(核心转储) 这不是所需的打印。 我认为这是返回的参数类型,尽管我可能非常错误。

【问题讨论】:

  • double* powerArgs 应该去掉星号。
  • 提示:你返回 int 变量并且你返回的类型是 double *。 pow return double ,因此返回类型中不需要星号。
  • 你必须返回 double 而不是 int :) 提示:强制转换为 double
  • 谢谢你们!

标签: c


【解决方案1】:

您为函数powerArgs 指定的返回类型是指向双精度的指针。但是,你实际返回的是一个整数int t

您可能应该将 t 声明为指向双精度的指针:double *t;

然后,可能需要使用malloc 或类似的东西在堆上为其分配空间,以便指向 t 的指针在您的powerArgs 函数之外仍然有效。

最后,将 指向的值设置为 pow 的结果。 *t = pow(T, L)

【讨论】:

    【解决方案2】:

    cmets 很快解决了这个问题,所以我从不删除 double 和 powerArg 的指针并重写 int t;将 t 翻倍; .

    【讨论】:

      猜你喜欢
      • 2017-09-29
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多