Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

#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;
}

My code is like above but my question is very simple. You must have seen the function sameNumberCheckOfTwoArrays. takes to integer pointers(in this programme arrays) and finds size of the array. Method is simple:

array1Size = sizeof(array1)/sizeof(array1[0]);
array2Size = sizeof(array2)/sizeof(array2[0]);
cout << array1Size << endl; 

As you can see. But when I call the function with numstring and numstringTest which each has 10 elements, it calculates the arraysize 1?! You can execute the code. But when I calculate without using funtion as you can see at the bottom of the code, I get 10 correctly. Why is this happening? I think I call function and pass values into function right? Or do I not?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
2.6k views
Welcome To Ask or Share your Answers For Others

1 Answer

You are passing the arrays to sameNumberCheckOfTwoArrays as pointers. In this process, the "array-ness" is dropped. Your function only sees an int* and reports the size accordingly.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...