I need help with pointers (& and *) and functions

Discussion in 'Programmer's Corner' started by asilvester635, Feb 3, 2017.

  1. asilvester635

    Thread Starter Member

    Jan 26, 2017
    67
    2
    I'm trying to return the pointer to the variable that has the bigger value using pointers & and *. Below is the source code for my main.cc, functions.cc, and functions.h files. What did I do wrong here? I have also posted the error that it gave me.

    ERROR STATEMENT:
    functions.cc:9:10: error: cannot initialize return object of type 'int *' with
    an lvalue of type 'int'
    return *a;
    ^~
    functions.cc:11:10: error: cannot initialize return object of type 'int *' with
    an lvalue of type 'int'
    return *b;
    ^~
    2 errors generated.
    make: *** [functions.o] Error 1



    main.cc
    Code (Text):
    1.  
    2. #include <string>
    3. #include <cstdio>
    4. #include <vector>
    5. #include "functions.h"
    6. using namespace std;
    7.  
    8. int main( int argc, char** argv ) {
    9.  
    10.     int x = 100;
    11.     int y = 200;
    12.     int result = 0;
    13.  
    14.     // find out which of the two variables (x and y) is the largest
    15.     pointerToMax(&x, &y);
    16. }
    17.  


    functions.cc
    Code (Text):
    1.  
    2. #include <string>
    3. #include <cstdio>
    4. #include <vector>
    5. #include "functions.h"
    6. using namespace std;
    7.  
    8. int* pointerToMax(int* a, int* b) {
    9.     if(a > b) {
    10.         return *a;
    11.     } else {
    12.         return *b;
    13.     }
    14. } // end of pointerToMax
    15.  


    functions.h
    Code (Text):
    1.  
    2. #ifndef FUNCTIONS_H
    3. #define FUNCTIONS_H
    4.  
    5. int* pointerToMax(int* a, int* b);
    6.  
    7. #endif
    8.  
     
  2. AlbertHall

    Distinguished Member

    Jun 4, 2014
    3,012
    642
    In the function a and b are pointers to integers so '(a>b)' is comparing the pointers not the values.
    'return *a' is trying to return the value of an integer not a pointer to an integer whereas the function is supposed to return a pointer.
    Instead use '(*a>*b)' and 'return a;' and 'return b;'
     
Loading...