In C, you can address a memory location storing a value directly by its variable name, or you can access it via its address using a variable that contains that address - a
pointer - declared using an
* in the declaration, and you can then use:
*
to mean
contents of
&
to mean
address of
in your code.
This works very well, but tends to become unwealdy and wordy, so C++ introduces a lighter weight way of aliasing a variable, known as a
reference. You declare a refernce using
& and it then becomes another name for the variable that it points at when it is defined - re-assign to it, and you're changing the contents of the variable being referenced, not which variable is being referenced.
The "trick", if you like to call it that, is that the alias is lost when the variable reference declaration goes out of scope - so that in his code
for (int k=0; k<length; k++) {
int &valref = values[k];
cout << valref << endl;
valref += 12;
}
valref is set as an alias in the second line, the value of the variable it's an alias for (a member of the
values array) is changed in the fourth line - but it goes out of scope in the fifth line at the end of the loop and so it's freshly defined as a new alias to the next element of the array on the following time around the loop.
Full source code example
[here]. Subject covered on our
learning to program in C and C++ and
C and C++ programming courses.
(written 2015-10-29)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
C233 - C and C based languages - OO in C++ - beyond the basics [798] References and Pointers in C++ - (2006-07-10)
[801] Simple polymorphism example - C++ - (2006-07-14)
[831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
[925] C++ - just beyond the basics. More you can do - (2006-11-14)
[1217] What are factory and singleton classes? - (2007-06-04)
[1572] C - structs and unions, C++ classes and polymorphism - (2008-03-13)
[1674] What a lot of files! (C++ / Polymorphism demo) - (2008-06-12)
[1819] Calling base class constructors - (2008-10-03)
[2577] Complete teaching example - C++, inheritance, polymorphism - (2010-01-15)
[2845] Objects and Inheritance in C++ - an easy start - (2010-07-01)
[3056] C++ - a complete example with polymorphism, and how to split it into project files - (2010-11-16)
[3123] C++ objects - some short, single file demonstrations - (2011-01-07)
[3124] C++ - putting the language elements together into a program - (2011-01-08)
[3142] Private and Public - and things between - (2011-01-22)
[3244] C and C++ - preprocess, compile, load, run - what each step is for - (2011-04-12)
[3251] C++ - objects that are based on other objects, saving coding and adding robustness - (2011-04-17)
[3508] Destructor methods in C++ - a primer - (2011-11-05)
[3811] Associated Classes - using objects of one class within another - (2012-07-21)
[3979] Extended and Associated objects - what is the difference - C++ example - (2013-01-18)
[4356] Object factories in C++, Python, PHP and Perl - (2014-12-19)
[4375] Final examples for 2014 - and a look at our 2015 training course options - (2014-12-31)
[4377] Designing a base class and subclasses, and their extension, in C++ - (2015-01-01)
[4559] When do I use the this keyword in C++? - (2015-10-29)
C207 - C and C based languages - Pointers and references [1155] Pointers in C - (2007-04-19)
[1478] Some new C programming examples - files, structs, unions etc - (2007-12-19)
[1497] Training Season Starts again! - (2008-01-07)
[2005] Variables and pointers and references - C and C++ - (2009-01-23)
[2572] The what and why of C pointers - (2010-01-13)
[2670] Pointers to Pointers to Pointers - what is the point? - (2010-03-10)
[3004] Increment operators for counting - Perl, PHP, C and others - (2010-10-18)
[3121] New year, new C Course - (2011-01-05)
[3238] Bradshaw, Ben and Bill. And some C and C++ pointers and references too. - (2011-04-09)
[3242] How to return 2 values from a function (C++ and C) - more uses of pointers - (2011-04-10)
[3386] Adding the pieces together to make a complete language - C - (2011-08-11)
[3399] From fish, loaves and apples to money, plastic cards and BACS (Perl references explained) - (2011-08-20)
[4128] Allocating memory dynamically in a static language like C - (2013-06-30)
Some other Articles
Perl, PHP, Python, Lua, Tcl, C++, Ruby - final public courses for 2015Formatting and outputting your own classes in C++Left shift operator on an output stream object - C++Hello World in C++ - a first program, with the process explainedVariables, Pointers and References - C and C++Well House Consultants - Python courses / what's special.Function prototype - what they are and why you should use them - C and C++Strings in C - strncmp strncpy and friendsPreprocessor directives in C and C++ - what they mean