#include <cstdlib>
#include <iostream>
#include <Math.h>
using namespace std;
int stepCount,i,x,y,z,j,array1Size,array2Size,tester;
int numstring[10] = {0,1,2,3,4,5,6,7,8,9};
int numstringTest[10] = {0,1,2,3,4,5,6,7,7,9};
int* numbers;
int* differentNumbers;
void stepCounter(int a){
// determines the step number of the number
if(a/10 == 0)
stepCount = 1;
else if(a/100 == 0)
stepCount = 2;
else if(a/1000 == 0)
stepCount = 3;
else if(a/10000 == 0)
stepCount = 4;
else if(a/100000 == 0)
stepCount = 5;
else if(a/1000000 == 0)
stepCount = 6;
else if(a/10000000 == 0)
stepCount = 7;
else if(a/100000000 == 0)
stepCount = 8;
else if(a/1000000000 == 0)
stepCount = 9;
}
void stepIndicator(int b){
// indicates each step of the number and pass them into array 'number'
stepCounter(b);
numbers = new int [stepCount];
for(i=stepCount; i>0; i--){
//
/*
x = (round(pow(10,stepCount+1-i)));
y = (round(pow(10,stepCount-i)));
z = (round(pow(10,stepCount-i)));
*/
x = (int)(pow(10,stepCount+1-i)+0.5);
y = (int)(pow(10,stepCount-i)+0.5);
numbers[i-1] = (b%x - b%y)/y;
}
}
int sameNumberCheck(int *array, int arraySize){
//checks if the array has two or more of same integer inside return 1 if same numbers exist, 0 if not
for(i=0; i<arraySize-1; i++){
//
for(j = i+1; j<arraySize; j++){
//
if(array[i]==array[j]){
//
return 1;
}
}
}
return 0;
}
void sameNumberCheckOfTwoArrays(int* array1, int* array2){
//
array1Size = sizeof(array1)/sizeof(array1[0]);
array2Size = sizeof(array2)/sizeof(array2[0]);
cout << array1Size << endl;
}
int main(int argc, char *argv[])
{
stepCounter(999999);
cout << stepCount << endl;
stepIndicator(826424563);
for(j=0; j<9; j++){
//
cout << numbers[j] << endl;
}
cout << sameNumberCheck(numstringTest, 10) << " must be 1" << endl;
cout << sameNumberCheck(numstring, 10) << " must be 0" << endl;
//cout << sameNumberCheckOfTwoArrays(numstring, numstringTest) << " must be 10" << endl;
sameNumberCheckOfTwoArrays(numstring, numstringTest);
tester = sizeof(numstringTest)/sizeof(numstringTest[0]);
cout << tester << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
我的代码如上所述,但我的问题非常简单。您必须已经看到函数sameNumberCheckOfTwoArrays。获取整数指针(在此程序数组中)并查找数组的大小。方法很简单:
array1Size = sizeof(array1)/sizeof(array1[0]);
array2Size = sizeof(array2)/sizeof(array2[0]);
cout << array1Size << endl;
如你所见。但是当我用numstring和numstringTest调用函数时,它们每个都有10个元素,它会计算数组大小1?!您可以执行代码。但是当我在不使用函数的情况下进行计算时,您可以在代码的底部看到,我正确地得到10。为什么会这样?我想我调用函数并将值传递给函数吧?或者我不是吗?
答案 0 :(得分:2)
您将数组作为指针传递给sameNumberCheckOfTwoArrays。在这个过程中,&#34; array-ness&#34;被丢弃了。您的函数只能看到一个int *并相应地报告大小。