• Welcome to Powerbasic Museum 2020-B.
 

News:

Forum in repository mode. No new members allowed.

Main Menu

ProgEx07

Started by Frederick J. Harris, November 04, 2009, 04:42:27 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Frederick J. Harris

11/6/2009    -- added a couple unsigned int casts to clear up some compiler warnings with newer
                      GNU compilers.


/* ProgEx07 -- This Is A C++ Program!!!  Save File As Main.cpp.  It Won't Compile As Main.c

  This is the 1st C++ program we've encountered.  How do we know its a C++ program?  Well,
  because we saved it as Main.cpp instead of Main.C!  Ha! Ha!  Well, that isn't exactly true
  but its pretty close!  Actually, what makes it a C++ program is the alteration we've done
  to the parameter passing mechanism of the IncrOne() function we've been using for the past
  couple programs.  Note below that instead of int* ptrNumber like we had in ProgEx06 where
  we had to pass a pointer to a parameter to be able to give the function a number it could
  modify, in this version of IncrOne we've specified the parameter as int& iNumber.  This is
  a reference parameter - exactly like BASIC!  So, while C++ programmers kind of 'look down'
  on BASIC programmers, they've been stealing BASIC syntax & constructions (because they're
  better).  The really neat part of this is the way the function is called.  Remember in
  ProgEx06 we had to set up the call like this to IncrOne()...

                                      IncrOne(&iNumber)

  Well, when the function is defined as taking a reference parameter, you don't have to pre-
  pend the '&' symbol in front of iNumber like in ProgEx6 to pass its address to the function.
  Again, this is exactly like BASIC.  In the program below the call looks like this...

                                      IncrOne(iNumber);

  ...and within the IncrOne function that function will have access to the address of iNumber
  and of course the value stored at &iNumber - which in the program below is 5.

  Another important detail...

  If this is confusing you...

  return ++iNumber

  ...all it means is the following...

  iNumber=iNumber+1
  return iNumber

  The '++' or '--' operators can appear either before or after a variable (attached to it
  of course).  The meaning and effect though are different depending on whether they are
  located before or after.  If we had this...

  return iNumber++;

  ...what would happen is that the function would return the number 5 to main - not 6!
  Then (and even more confusing) before the function terminated it would increment iNumber
  to 6.  So the function would be passed the number 5; it would return 5; then, because it
  has the actual address of iNumber back in main(), it will increment it to 6!  If you don't
  believe me try it out.  C can be a devil!

*/

#include <stdio.h>

int IncrOne(int& iNumber)
{
printf("(In Function IncrOne()) -- &iNumber = %u\n",(unsigned int)&iNumber);  // prints address of iNumber
printf("(In Function IncrOne()) -- iNumber  = %u\n",iNumber);   // just prints iNumber
return ++iNumber;
}

int main(void)
{
int iNumber=5;

printf("iNumber=%d\n",iNumber);                  //prints value stored in variable iNumber
printf("&iNumber=%u\n",(unsigned int)&iNumber);  //prints address where iNumber is stored
printf("IncrOne(5)=%d\n",IncrOne(iNumber));      //passes address of iNumber to function
printf("iNumber=%d\n",iNumber);                  //prints value stored in variable iNumber
getchar();                                       //pauses execution by waiting for character key press

return 0;
}

/*
Output:
============================================
iNumber=5
&iNumber=2293620
(In Function IncrOne()) -- &iNumber = 2293620
(In Function IncrOne()) -- iNumber  = 5
IncrOne(5)=6
iNumber=6
*/