从 int 到 int 的无效转换*

Posted

技术标签:

【中文标题】从 int 到 int 的无效转换*【英文标题】:invalid conversion from int to int* 【发布时间】:2017-04-09 09:11:30 【问题描述】:

我收到错误:

从 int 到 int* 的转换无效。

我没有创建任何 int*(我认为),当我将违规行更改为 int* 时,没有构建错误,但程序在启动时崩溃。

这是我的代码:

//Main:
int main()

    //Varibales:
    Random randomInt;
    clock_t start;
    clock_t End;
    double duration;
    double clocksPerSec;
    int result;
    int arraySize;


    //Repeat 100 times:
    for(int i=1; i<=100; i++)

        //Set array size:
        arraySize = i*500;
        //Create the array:
        int testArray[arraySize];

        //For the array size:
        for(int j=0; j<arraySize; j++)


            //Add random number to array:
            testArray[j] = randomInt.randomInteger(1, 10000);

        

        //Run the test:
        start = clock();
        result = algorithmTest(testArray[arraySize], arraySize);
        End = clock();

        //Calculate execution time:
        duration = End - start;
        clocksPerSec = duration/CLOCKS_PER_SEC;

        //Display the result:
        cout << "The median is: ";
        cout << result << endl;
        cout << "Exection time was: ";
        cout << clocksPerSec;
        cout << "s\n" << endl;

    

    //Return 0:
    return 0;


当我调用 algorithmTest(); 时,它似乎会抛出错误;这里是:

//First Test:
int algorithmTest(int testArray[], int Size)

    //Declare variables:
    int k = Size/2;
    int numSmaller;
    int numEqual;

    //For every element in the array:
    for(int i=0; i<Size; i++)

        //Set varibales to 0:
        numSmaller = 0;
        numEqual = 0;

        //For every element in the array:
        for(int j=0; j<Size; j++)

            //If j is less than i:
            if(testArray[j] < testArray[i])

                //Increment numSmaller:
                numSmaller++;

            //Else if j is equal to i:
            else if(testArray[j] == testArray[i])

                //Increment numEqual:
                numEqual++;

            
        

        //Determine if the median was found:
        if(numSmaller < k && k <= (numSmaller + numEqual))

            //Retrun the medain:
            return testArray[i];

        
    

    //Return 0:
    return 0;


【问题讨论】:

【参考方案1】:
result = algorithmTest(testArray[arraySize], arraySize);

应该是

result = algorithmTest(testArray, arraySize);

您的函数int algorithmTest(int testArray[], int Size)int[] 作为第一个参数,而您传递testArray[arraySize],其中[i] 运算符表示获取testArrayith 元素处的值,即int .因此,您会遇到该错误。

为了澄清一点,int testArray[arraySize]; 行中的[...]result = algorithmTest(testArray[arraySize], arraySize); 行中的[...] 不同:第一个用于指示数组的大小,而第二个用于访问元素.

【讨论】:

【参考方案2】:

看一下AlgorithmTest的定义。您需要一个 int[](也称为 int*)作为第一个参数,但是当您调用它时,您会给它一个实际的 int

【讨论】:

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

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

从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的无效转换

从 'void* (*)(int*)' 到 'void* (*)(void*)' 的无效转换

从 'int' 到 'const char*' 的无效转换 [-fpermissive]| (初学者)

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

从具体化的“System.Int32”类型到“System.Int64”类型的指定转换无效