&variable
:
assessing the pointer of the variable
(reference)
int* intPointer
:
creates a pointer intPointer
to an integerint** intPointPointer
: a pointer pointing to
an integer-pointer
:: a two-dimensional int-array
int intArray[]
: main(int argLength, char* argValues[])
#include <iostream> using namespace std; int main () { int var1 = 20; int var2[] = {1,2,3}; cout << endl; cout << "address of var1: " << &var1 << endl; cout << "address of var2: " << var2 << endl; cout << "address of var2: " << &var2 << endl; int* ip; // pointer variable ip = &var1; // store address of var1 in pointer variable ip cout << endl; cout << "value of var1: " << var1 << endl; cout << "value of ip: " << ip << endl; cout << "value of *ip: " << *ip << endl; ip = var2; // not &var2 (!), since arrays are already pointers for (int i=0; i<3; i++) { cout << endl; cout << "address of var2[" << i << "] = " << ip << " " << &(*ip) << " " << &var2[i] << endl; cout << " value of var2[" << i << "] = " << *ip << " " << *(&(*ip)) << " " << *(&var2[i]) << endl; ip++; // point to the next location (errors likely) } return 0; }
int array_0[5]
: when size of array is known
a compiling time
int array_1[var1]
: not standard, but possibly a g++
is o.k. with it
(standard from C++14 and on) int *array_2 = new int[var2]
: when size of array, int *array_3 = new(nothrow) int[var3]
: idem, but
continuing new(..)
available for
programming experiments
delete
everything on the heap when not needed
anymore #include <iostream> // standard IO #include <cstdlib> // for atof using namespace std; int main(int argLength, char* argValues[]) // parsing command line arguments { if (argLength==1) { cout << "please run with an long integer argument\n"; return 0; } long int dynamicArraySize = atof(argValues[1]); // casting string to long long int gigaByte = 1073741824; // cout << endl; cout << "trying to construct integer arrays of size : " << dynamicArraySize << endl; cout << "using " << dynamicArraySize*sizeof(int)*1.0/gigaByte << " Gigabytes of memory " << endl << endl; // int array_1[dynamicArraySize]; // not all compilers like that cout << "sizeof(array_1) : " << sizeof(array_1) << endl; // int *array_2 = new int[dynamicArraySize]; // arrays are pointers cout << "sizeof(array_2) : " << sizeof(array_2) << endl; int *array_3 = new(nothrow) int[dynamicArraySize]; // if (array_3 == 0) // controlled exit for null pointer { cout << "I am out of memory" << endl; return 0; // program failed } cout << "sizeof(*array_3) : " << sizeof(*array_3) << endl; // cout << "sizeof(int) : " << sizeof(int) << endl; // delete[] array_2; // deletes the whole array delete array_3; // deletes only the first element // return 1; }
top
size_t
, an unsigned integer type which can store #include <iostream> // standard IO #include <stdio.h> // for printf #include <cstdlib> // for atof #include <math.h> // for the math #include <time.h> // ('clock()' measures time in nanoseconds) using namespace std; const long int oneGigaByte = 1073741824; // one Giga Byte /* **************************************** */ /* ***** time in seconds ******* */ /* **************************************** */ double timeInSeconds() { const double oneSecond = 1.0 / CLOCKS_PER_SEC; static long int lastTime = clock(); long int actual_time = clock(); long int elapsed_time = actual_time - lastTime; lastTime = actual_time; return elapsed_time * oneSecond; // time passed since last call } /* **************************************** */ /* ***** main ******* */ /* **************************************** */ int main(int argLength, char* argValues[]) // parsing command line arguments { if (argLength==1) { cout << "please run with a double argument (memory in GB)\n"; return 0; } long int dynamicArraySize = (long)(atof(argValues[1])*oneGigaByte*1.0/sizeof(int)); timeInSeconds(); // initialized int onePerCent = (int)(dynamicArraySize/100); // int *aa = new int[dynamicArraySize]; /* for (int i=0;i<dynamicArraySize;i++) for (long int i=0;i<dynamicArraySize;i++) */ for (size_t i=0;i<dynamicArraySize;i++) { aa[i] = i; if ((i%onePerCent)==0) printf("(main) %5.2f GB indices allocated, %5.2f seconds used\n", i*1.0/oneGigaByte, timeInSeconds()); } // printf("\n"); printf("(main) starting infinite loop\n\n"); // while (true) // infinite loop double a = log(34545.3454); // return 1; }
int* aPointer
an int pointer: *aPointer
for value int& alias
an alias (different name)#include <iostream> // standard IO using namespace std; int main() { double a = 10.0; double& b = a; // an alias cout << "a = " << a << endl; cout << "b = " << b << endl << endl; double *pA = &a; double *pB = &b; b = 6.0; cout << "*pA = " << *pA << endl; cout << "*pB = " << *pB << endl; return 1; }