int *k = 0x4711;
new
/new[]
und delete
/delete[]
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
constexpr int len = 10;
int statArr[len] = {0};
int *dynArr = NULL;
cout << "Stack" << endl;
cout << "----------" << endl;
for (int i = len - 1; i >= 0; i--) {
cout << "&statArr[" << setfill('0') << setw(3) << dec << i << "] = " << hex << &statArr[i] << endl;
}
cout << "----------" << endl;
dynArr = new int[len];
cout << "Heap" << endl;
cout << "----------" << endl;
for (int i = len - 1; i >= 0; i--) {
cout << " &dynArr[" << setfill('0') << setw(3) << dec << i << "] = " << hex << &dynArr[i] << endl;
}
cout << "----------" << endl;
delete[] dynArr;
}
#include <iostream>
#include <iomanip>
using namespace std;
static void gebeArrayAus(int *arr, int n) {
cout << "----------" << endl;
for (int i = 0; i < n; i++) {
cout << "statArr[" << setfill('0') << setw(3) << i << "] = " << setfill(' ') << setw(3) << dec << arr[i];
cout << ", &statArr[" << setfill('0') << setw(3) << dec << i << "] = " << hex << &arr[i] << endl;
}
cout << "----------" << endl;
}
int main(void) {
constexpr int len = 10;
int statArr[len] = {0};
int *pStatArr = NULL;
int **ppStatArr = NULL;
gebeArrayAus(statArr, len);
pStatArr = &statArr[3];
ppStatArr = &pStatArr;
**ppStatArr = 21;
cout << "\n pStatArr = &statArr[3];" << endl;
cout << " ppStatArr = &pStatArr;" << endl;
cout << "**ppStatArr = 21;" << endl;
cout << "&pStatArr = " << hex << &pStatArr << ", pStatArr = " << hex << *ppStatArr << ", *pStatArr = " << dec << **ppStatArr << endl;
cout << "ppStatArr = " << hex << ppStatArr << ", *ppStatArr = " << hex << *ppStatArr << ", **ppStatArr = " << dec << **ppStatArr << endl;
cout << "\n----------\n" << endl;
*ppStatArr = *ppStatArr + 4;
**ppStatArr = 42;
cout << " *ppStatArr = *ppStatArr + 4;" << endl;
cout << "**ppStatArr = 42;" << endl;
cout << "&pStatArr = " << hex << &pStatArr << ", pStatArr = " << hex << *ppStatArr << ", *pStatArr = " << dec << **ppStatArr << endl;
cout << "ppStatArr = " << hex << ppStatArr << ", *ppStatArr = " << hex << *ppStatArr << ", **ppStatArr = " << dec << **ppStatArr << "\n" << endl;
gebeArrayAus(statArr, len);
return 0;
}
#include <iostream>
using namespace std;
void tausche_wert(int a, int b) {
int h = a;
a = b;
b = h;
cout << "Fkt.: " << a << " " << b << endl;
}
int main(void) {
int a = 3, b = 11;
cout << "main: " << a << " " << b << endl;
tausche_wert(a, b);
cout << "main: " << a << " " << b << endl;
return 0;
}
#include <iostream>
using namespace std;
void tausche_wert(int *pa, int *pb) {
int h = *pa;
*pa = *pb;
*pb = h;
cout << "Fkt.: " << *pa << " " << *pb << endl;
}
int main(void) {
int a = 3, b = 11;
cout << "main: " << a << " " << b << endl;
tausche_wert(&a, &b);
cout << "main: " << a << " " << b << endl;
return 0;
}
?
setprecision(int n)
double sin(double x)
int rand(void)
Ăbergabe von Parametern und RĂŒckgabewerten als Kopie auf dem Stack (â Call by value)
Ăbergabe von modifizierbaren Parametern mittels Zeigern (â Call by reference)
Technisch immer noch Call by value, aber jetzt werden die Adressen kopiert.
#include <iostream>
using namespace std;
void tausche_wert(int &a, int &b) {
int h = a;
a = b;
b = h;
cout << "Fkt.: " << a << " " << b << endl;
}
int main(void) {
int a = 3, b = 11;
cout << "main: " << a << " " << b << endl;
tausche_wert(a, b);
cout << "main: " << a << " " << b << endl;
return 0;
}
#include <iostream>
using namespace std;
void inkrement(int b[5]) {
for (int k = 0; k < 5; k++) {
b[k]++;
}
cout << "sizeof(b): " << sizeof(b) << endl;
}
int main(void) {
int i, a[5] = {2, 4, 6, 8, 10};
cout << "sizeof(a): " << sizeof(a) << endl;
inkrement(a);
for (int k = 0; k < 5; k++) {
cout << a[k] << " ";
}
cout << endl;
return 0;
}
#include <iostream>
using namespace std;
void inkrement(int b[], int const n) {
for (int k = 0; k < n; k++) {
b[k]++;
}
}
int main(void) {
int constexpr n = 5;
int i, a[n] = {2, 4, 6, 8, 10};
inkrement(a, n);
for (int k = 0; k < n; k++) {
cout << a[k] << " ";
}
cout << endl;
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
void plusEinsAusgabe(vector<int> v) {
for (int i = 0; i < v.size(); i++) {
v[i]++;
cout << v[i] << " ";
}
cout << endl;
}
int main(void) {
vector<int> vec = {1,2,3,4,5};
plusEinsAusgabe(vec);
for (int i: vec) {
cout << i << " ";
}
cout << endl;
return 0;
}
#include <iostream>
using namespace std;
template <typename T>
T arrayMin(int const n, T a[]) {
if (n == 0)
return -1;
T min = a[0];
for (int i = 1; i < n; ++i) {
if (a[i] < min) {
min = a[i];
}
}
return min;
}
int main() {
double feld[] = {10.1, 9.9, 9.3, 10.5, 11.3, 12.0};
short feld2[] = {10, 9, 3, 5, 11, 12};
double min = arrayMin<double>(6, feld);
short min2 = arrayMin<short>(6, feld2);
cout << "double minimum: " << min << endl;
cout << "short minimum: " << min2 << endl;
return 0;
}
#include <iostream>
using namespace std;
template<typename T> T func(T a) {
T result = a * 2;
return result;
}
int main() {
short s = func<short>(1024);
float f = func<float>(1024);
int i = func<int>(1024);
cout << "s = " << s << endl;
cout << "f = " << f << endl;
cout << "i = " << i << endl;
return 0;
}
template <typename T> T foo(T in);
#include <iostream>
using namespace std;
int main(void) {
constexpr int rows = 3, columns = 4;
int arr[rows][columns] = {0};
cout << "GröĂe einer Zeile: " << sizeof(arr[0]) << endl;
cout << "Abstand zw. Zeile 1 und 2: ";
cout << (reinterpret_cast<intptr_t>(&arr[2]) - reinterpret_cast<intptr_t>(&arr[1])) << endl;
return 0;
}
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main(void) {
time_point<steady_clock> jetzt = steady_clock::now();
for (int i = 0; i < 10000000; i++) {}
time_point<steady_clock> spaeter = steady_clock::now();
duration<double> zeit = spaeter - jetzt;
cout << "Zeit: " << zeit.count() << " sec." << endl;
return 0;
}
#include <iostream>
using namespace std;
#define SQUARE(x) ((x) * (x))
#define PFERD 2
int hallo(void) {
cout << "hallo" << endl;
return 1;
}
int main(void) {
int x = 2;
cout << SQUARE(++x) << endl;
x = 2;
cout << SQUARE(x++) << endl;
SQUARE(hallo());
#ifdef PFERD
cout << "PFERD!" << endl;
#endif
#if PFERD == 1
cout << "Ein Pferd" << endl;
#endif
return 0;
}
sin()
oder time()
#include <cmath>
inline int foo(void);
#define MAX_ARR_SIZE 100
12
16
Quelle: cppreference.com, Abschnitt âEvaluation Orderâ
Undefined behavior
1) If a side effect on a memory location is unsequenced relative to another side effect on the same memory location, the behavior is undefined.
i = ++i + 2; // well-defined
i = i++ + 2; // undefined behavior until C++17
Quelle des Beispiels und des Ausschnitts: cppreference.com, Abschnitt âEvaluation Orderâ (CC-BY-SA)