In this part of my C++ with Qt tutorial, I’d like to expand upon the area of data definitions, more specific the definition of variables. In the previous part about data input I already used some variable definitions in order to store and use the data input by the user within the program.
This is more of a background article, but it should give you a better understanding of what is happening inside the computer when your program is running. The additional knowledge can help you to avoid problems or find the source of bugs in your programs later on.
So let’s have a closer look at the definition of some commonly used types of variables…
In order for the computer to do anything with a value that is either entered by a user, predefined in the program’s code or calculated, we need to define a variable that can store the value.
While not all data has to be entered manually by the user, programs need clearly defined memory regions in the RAM where data can be stored accessed temporarily. The computer’s central processing unit (CPU) has some memory registers, but not enough to store all data that is necessary for a more complex application.
On the technical side, the definition of a variable makes the computer reserve a part of its main memory and assigns a fixed memory address to the name of the variable. The amount of reserved memory depends upon the type of the variable – a single character needs less memory than a whole string of characters, and a small integer number needs less space than a long number, just to name two examples.
When the program accesses the variable – or more exactly, tries to read or change the value that is stored in this variable – the computer looks up the current value at the memory address that is associated with this variable, and reads or changes it from there.
In the C++ programming language – like in a lot of other programming languages – variables have to be properly defined before they can be used. A proper variable definition includes the data type and the name of the variable. In C++ (and other variations of the C programming language), the data type is written first, before the name of the variable, e.g.:
In the above example, the variable with the name “x” is defined as an integer variable (identifier “int”). This means that “x” can contain a positive number value where the numbers are integer values without any decimal places.
This form – a single data type identifier followed by the variable name and a semicolon – is the shortest and easiest type of a data definition in C++.
Once a variable is defined, it can be used in the program. If you want to assign a specific value to the variable, this can be done in a way that is similar to a mathematical equation. The following line of code stores the value “5” in the variable “x”:
It is also possible to combine the variable definition with the assignment of an initial value:
The memory reservation and storing the value in the newly reserved memory area are combined into one line of code, although the computer will execute both steps one after the other (just like it would be when you split up the variable definition and the value assignment into two separate lines of code).
In the same way, a computed value can be assigned to the variable:
The statement above would instruct the computer to first add 4 to the current value of x (right side of the assignment) and then store the new value in x. The new, computed value overwrites the old value as it is stored in the same memory location as the old value for x.
Functions and methods can also be a source for a new value that can be assigned to a variable. Some functions return a value just like a direct computation:
In this example, the variable “y” is assigned the return value of the function “max” which determines the maximum of the values stored in the variables “a” and “b”. So in the end, “y” contains the maximum of “a” and “b”.
Some functions and methods also use reference variables as part of their input, so that more than one value can be returned. So in a function call like
the Function “MyComputation” not only returns a value which is then stored in the variable “y”, but it also can change the values for the input variables “a”, “b” and “c”, if these have been defined as reference variables or pointers. More on that later…
In the C and C++ programming language, you can combine the definition of a variable that uses one of the standard data types with the assignment of an initial value for that variable, e.g.:
If your code gets longer and more complicated, you can use this to make sure that certain variables have useful values when they are used the first time. Alternatively, you can put in a special code section, function or method with the assignment of initial values for these variables and use this at the start of your program.
Due to the reservation of a fixed amount of memory for a defined variable, the variable itself can only contain a certain range of possible values. These values also depend on the basic binary nature of the inner workings of the computer.
This means that an integer variable like the one defined by
cannot be as big as you like, only as big as what can be stored inside the reserved part of the memory.
In the case of an integer variable defined with the identifier “int”, this typically means a 16-bit (2-byte) value (at least right now, in autumn of 2014). Each bit can only have one of two values, namely “0” (zero) or “1” (one). With 16 bits, the amount of possible values is 2 to the power of 16 (2^16), which is equal to 65536 different values. As the values start with zero (in the form of 16 single zeroes), the highest possible value is 65535.
Bigger values can be stored and used by using different data types like “long int” (which uses double the amount of memory than a normal “int”).
Here is a short overview for typical value ranges depending on the amount of memory that different data types use:
|Amount of possible values||Remarks|
|8||256||equal to 2 to the power of 8|
|32||4 294 967 296||more than 4 billion values|
|64||18 446 744 073 709 551 616||that's around 18 billion billion possible values!|
That’s all for now concerning the basics of data definitions. In the next part of this tutorial, we take a closer look at the different standard data types that you can use when defining variables or constants.