C - “从“int*”到“int”的无效转换

Posted

技术标签:

【中文标题】C - “从“int*”到“int”的无效转换【英文标题】:C - "Invalid Conversion from "int*" to "int" 【发布时间】:2019-11-20 06:35:52 【问题描述】:

我是编码新手。我试图制作一个具有多种功能的程序,该程序具有不同的线性搜索和冒泡排序功能。我正在使用带有 TDM-GCC 4.9.2 64 位编译器的 DevC++ IDE。我不知道我在哪里犯了错误。 在第 17 和 19 行,它显示错误“从“int*”到“int”的无效转换。

#include<stdio.h>
void LinearSearch(int,int);
void BubbleSort(int,int);
int main()

    int i,a[10],n;
    int size=10;
    for(i=0;i<10;i++)
    
        printf("Enter a number\n");
        scanf("%d",&a);
    
    printf("Press the button og=f your choice!\n");
    printf("1. Linear Seach    2. Bubble Sort\n");
    scanf("%d",&n);
    if(n==1)
    LinearSearch(a,size); //Invalid Conversion from "int*" to "int
    else if(n==2)
    BubbleSort(a,size);  //Invalid Conversion from "int*" to "int
    else
    printf("You have pressed the wrong button!\n");

void LinearSearch(int a[10],int sizA)

    int i,s,f=0;
    printf("Enter the search value\n");
    scanf("%d",&s);
    for(i=0;i<10;i++)
    
        if(s==a[i])
        
            f=1;
            printf("The Search Avlue is located at position no. %d in the array",i);
        
    
    if(f==0)
    printf("Search Value Not Found");

void BubbleSort(int a[10],int sizB)

    int i,j,k;
    for(i=0;i<10;i++)
    
        for(j=0;j<10-i-1;j++)
        
            if(a[j]>a[j+1])
            k=a[j];
            a[j]=a[j+1];
            a[j+1]=k;
        
    
    for(i=0;i<10;i++)
    
        printf("%d  ",a[i]);
    

【问题讨论】:

scanf("%d",&amp;a); --> scanf("%d",&amp;a[i]); &amp;a[i]a + i ;) @greybeard,是的,这两个表达式是等价的。但是,我更喜欢&amp;a[i],因为它更好地描述了我们想要做的事情:增加数组的索引并指向对应的变量。这与将 X Bytes 添加到 X 是 sizeof(data_type) 的数组的指针相同。我只是觉得不太直观。有点难以记住:) 【参考方案1】:

scanf("%d",&amp;a) 应该是scanf("%d",&amp;a[i])

并更正来自

的函数前向声明
void LinearSearch(int,int);
void BubbleSort(int,int);

void LinearSearch(int[],int);
void BubbleSort(int[],int);

【讨论】:

【参考方案2】:

您的两个函数的声明与定义不匹配。为了清楚起见,您已经声明:

void LinearSearch(int,int);  //<---the two arguments are int
void BubbleSort(int,int);    //<---the two arguments are int

但是,最后,您将函数定义为:

void LinearSearch(int a[10],int sizA); //<---the first argument is an int*
void BubbleSort(int a[10],int sizB);   //<---the first argument is an int*

如果您想解决您报告的编译错误,请将您的声明替换为这两行!

P.S. 另请注意,您可能还需要解决其他一些小问题(使用scanf("%d",&amp;a); 时)。正如其中一条评论所指出的,正确的指令应该是scanf("%d",&amp;a[i]);

【讨论】:

以上是关于C - “从“int*”到“int”的无效转换的主要内容,如果未能解决你的问题,请参考以下文章

从 int 到 int 的无效转换** C++

将包含 int 和 int[] 的结构从 C# 编组到 C++

在c ++中逐个字符从字符串传递到int时不精确

如何使用 JNI 从本机 c 库将 double 和 unsigned int 返回到 java

如何从相机投影矩阵计算 ext 和 int 参数

System::IntPtr 到 C++/CLI 中的 int*