Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.7k views
in Technique[技术] by (71.8m points)

c++ - Something went wrong with passing pointer to a function

#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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...