我从 g++ 编译器收到此错误 - 从“int*”到“int”的无效转换 [-fpermissive]

Posted

技术标签:

【中文标题】我从 g++ 编译器收到此错误 - 从“int*”到“int”的无效转换 [-fpermissive]【英文标题】:i am getting this error from g++ compiler - invalid conversion from ‘int*’ to ‘int’ [-fpermissive] 【发布时间】:2014-03-16 17:37:28 【问题描述】:

我的完整程序如下:

#include<iostream>
using namespace std;

int max(int *,int); 

int main()

    int n, a[10], b;
    cout << "Please enter the no. of integers you wish to enter ";
    cin >> n;
    for(int i = 0; i < n; i++)
    
        cout << endl << "please enter the " << i+1 << " no. ";
        cin>>a[i];
    
    b = max(&a[0], n);
    cout << endl << "The greates no. is " << a[b] << " and its index position is " << b;
    return 0;


int max(int * ptr,int n)

    int b[10], i, max, k;
    &b[0] = ptr;
    max = b[0];
    for(i = 0; i < n; i++)
    
        if (max < b[i]);
        max = b[i];
        k = i;
    
    return k;

我想将指针传递给函数并找到最大的数字。 我不确定传递数组是否算作传递指针。

【问题讨论】:

我非常怀疑这是否有效:&amp;b[0] = ptr; if 语句后面有一个分号:if (max &lt; b[i]); 纠正了我的错误,现在在 &b[0]=ptr; 中将左值作为赋值的左操作数; @user3426284 你很着急。阅读我的答案。 【参考方案1】:

你不需要为b[10]分配内存,这里只需要一个指针,而不是

int b[10];

只需声明一个指针并将其地址设置为函数传递的数组的起始元素。

int* b= ptr; 

【讨论】:

【参考方案2】:
#include<iostream>
using namespace std;
int  max(int *,int);
int main()

    int n,a[10],b;
    cout<<"Please enter the no. of integers you wish to enter ";
    cin>>n;
    for(int i=0;i<n;i++)
    
        cout<<endl<<"please enter the "<<i+1<<" no. ";
        cin>>a[i];
    
    b=max(a,n);
    cout<<endl<<"The greates no. is "<<a[b]<<" and its index position is "<<b;
    return 0;


int max(int *a,int n)

    int i,max,k=0;
    //&b[0]=ptr;
    max=a[0];
    for(i=1;i<n;i++)
    
        if(max<a[i])
            max=a[i];
        k=i;
    
    return k;

试试这个程序。 它不使用 b[] ,这实际上是不必要的,只需将数组 a 作为参数传递。

变化

b=max(a,n);

int max(int *a,int n)

    int i,max,k=0; // INITIALIZE k !
    //&b[0]=ptr;
    max=a[0];
    for(i=1;i<n;i++)
    
        if(max<a[i])
            max=a[i];
        k=i;
    
    return k;

您应该将K 初始化为0

【讨论】:

if语句后面还有分号 我正在将 i 的值分配给 k,所以初始化 k=0 真的很有必要顺便说一句谢谢您的帮助 你知道为什么我得到这个错误 lvalue required as left operand of assignment in &b[0]=ptr; 这个不能用,但是可以用ptr=&b[0]; @user3426284:这是因为你不能改变数组的地址,因为它有一个固定的地址,当你初始化它时。【参考方案3】:

你的函数无效你不能赋值

&b[0] = ptr;

这样的赋值没有意义,因为它试图改变数组元素 b[0] 的地址。

你不需要在函数中声明任何额外的数组。

此外,您的函数具有未定义的行为,以防第一个元素是数组的最大元素。在这种情况下,函数返回未初始化的变量 k。 在 if 语句之后还有一个分号

if (max < b[i]);

所以这种说法也没有任何意义。

函数可以写得更简单

int max( const int * ptr, int n )

    int max_i = 0;

    for ( int i = 1; i < n; i++ )
    
        if ( ptr[max_i] < ptr[i] ) max_i = i; 
    

    return max_i;

【讨论】:

【参考方案4】:

把你的表情改成:

b=max(a,n);

你不需要通过引用传递数组,它们会自动通过引用传递。

也改变: &amp;b[0]=ptr;b=ptr; 但为此将 b 初始化为 int * b;

或者简单地说, 不要将 ptr 的值赋给 b,直接在 ptr 上工作。

【讨论】:

以上是关于我从 g++ 编译器收到此错误 - 从“int*”到“int”的无效转换 [-fpermissive]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我从 tensorflow 网站收到此代码的语法错误? [关闭]

无法将参数 1 从 int 转换为 int && 错误 [重复]

我从 apache 收到此错误

谁能告诉我为啥我从 GitLab 收到此“错误:作业失败:退出代码 1”消息?

我从我的 Web 服务收到此错误:错误 1053 服务未及时响应启动或控制请求

错误:在 [-Wnarrowing] 中缩小从“int”到“char”的“199”转换