我从 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;
我想将指针传递给函数并找到最大的数字。 我不确定传递数组是否算作传递指针。
【问题讨论】:
我非常怀疑这是否有效:&b[0] = ptr;
if
语句后面有一个分号:if (max < 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);
你不需要通过引用传递数组,它们会自动通过引用传递。
也改变:
&b[0]=ptr;
到 b=ptr;
但为此将 b 初始化为 int * b;
或者简单地说, 不要将 ptr 的值赋给 b,直接在 ptr 上工作。
【讨论】:
以上是关于我从 g++ 编译器收到此错误 - 从“int*”到“int”的无效转换 [-fpermissive]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我从 tensorflow 网站收到此代码的语法错误? [关闭]
无法将参数 1 从 int 转换为 int && 错误 [重复]
谁能告诉我为啥我从 GitLab 收到此“错误:作业失败:退出代码 1”消息?