首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >编译时出错:类型不兼容和类似的警告(附图)

编译时出错:类型不兼容和类似的警告(附图)
EN

Stack Overflow用户
提问于 2020-12-16 12:38:55
回答 3查看 56关注 0票数 0

我正在编写一个函数,该函数使用递归性返回数组的逆数组,但我不断收到以下警告:

以下是我的代码

代码语言:javascript
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>

int inv( float* t[],int n)
{   float u;
    if (n==0) return 0;
    else
    {
        u=*t;
        *t=*(t+n);
        *(t+n)=u;
        return(inv(*(t+1),n-1));
    }

}

int main()
{
    float t[]={1,2,3,4,5,6,7,8,9};
    int n=sizeof t /sizeof *t;
    int i=0;
    inv(t,n);
    for(i=0;i<n;i++)printf("%f",t[i]);
    return 0;
}
EN

回答 3

Stack Overflow用户

发布于 2020-12-16 12:55:54

浮点数int inv(

* t[],int n)

这里,float* t[]声明了一个指针数组。请注意,*t[i] = *(*(t+i))

如果i= 0,则为*(*(t+i)) = *(*(t)) = *(*t)

这里,*tfloat*类型,u是float类型。

使用表达式u=*t;会产生该错误(将float*值赋给float)

解决方案:int inv( float* t[],int n)更改为int inv( float t[],int n)

票数 0
EN

Stack Overflow用户

发布于 2020-12-16 13:02:21

我使用一个过程将数组元素按降序排列

代码语言:javascript
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>

void revs(int i, int n, float *arr)
{
   if(i==n)
  {
     return ;
  }
  else
  {
       revs(i+1, n, arr);
       printf("%.f ", arr[i]);
  }
   return 0;
}

int main()
{
    float t[]={1,2,3,4,5,6,7,8,9};
    int n=sizeof t /sizeof t[0];
    int i=0;
    revs(0,n,t);
}
票数 0
EN

Stack Overflow用户

发布于 2020-12-16 15:10:04

看起来OP的函数inv的意图是使用递归原地反转n float值数组的元素。

在原始inv代码中,编译器会将参数声明float* t[]调整为等价于float** t。需要将其更改为float t[]或等效的float* t

在原始inv代码中,返回值要么是0,要么是对自身的递归调用的结果,只能是0。因此,返回值没有任何用处。最好将函数的返回类型更改为void

inv函数中,参数n被设置为来自main的初始调用中数组的长度。该函数在递归之前交换索引0和n处的元素的值,但索引n处没有元素。最后一个元素的索引为n-1。在递归之前,函数应该交换索引为0和n-1的元素。交换第一个和最后一个元素后,索引从1到n-2的其余n-2元素可以通过递归调用进行交换。原始inv代码在递归调用中使用值n-1,但它应该为n-2

如果n小于2,则inv函数不需要执行任何操作。

基于OP的原始代码的inv的可能实现如下:

代码语言:javascript
运行
AI代码解释
复制
void inv(float* t,int n)
{   
    float u;
    if (n>=2)
    {
        u=*t;
        *t=*(t+n-1);
        *(t+n-1)=u;
        inv(t+1,n-2));
    }
}

可以使用数组下标操作符编写相同的函数,如下所示:

代码语言:javascript
运行
AI代码解释
复制
void inv(float t[],int n)
{   
    float u;
    if (n>=2)
    {
        u=t[0];
        t[0]=t[n-1];
        t[n-1]=u;
        inv(&t[1],n-2));
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65323449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档