从 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]
运算符表示获取testArray
的ith
元素处的值,即int
.因此,您会遇到该错误。
为了澄清一点,int testArray[arraySize];
行中的[...]
与result = algorithmTest(testArray[arraySize], arraySize);
行中的[...]
不同:第一个用于指示数组的大小,而第二个用于访问元素.
【讨论】:
【参考方案2】:看一下AlgorithmTest的定义。您需要一个 int[](也称为 int*)作为第一个参数,但是当您调用它时,您会给它一个实际的 int
【讨论】:
以上是关于从 int 到 int 的无效转换*的主要内容,如果未能解决你的问题,请参考以下文章
从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的无效转换
从 'void* (*)(int*)' 到 'void* (*)(void*)' 的无效转换
从 'int' 到 'const char*' 的无效转换 [-fpermissive]| (初学者)