将指针传递给函数时出错了

时间:2015-09-17 06:58:31

标签: c++ arrays pointers

#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。为什么会这样?我想我调用函数并将值传递给函数吧?或者我不是吗?

1 个答案:

答案 0 :(得分:2)

您将数组作为指针传递给sameNumberCheckOfTwoArrays。在这个过程中,&#34; array-ness&#34;被丢弃了。您的函数只能看到一个int *并相应地报告大小。