Zacházení s pamětí

#ifdef _WIN32
#include "stdafx.h"
#endif
#include <cstdio>

void vypis(const int *v)
{
	for (int i=0; i<10; ++i) {
		printf("%i\n", v[i]);
	}
}

int main()
{
	int *data = new int[10];
	for (int i=0; i<10; ++i) {
		data[i] = i * i;
	}
	vypis(data);
	delete[] data;
	return 0;
}

Všimněte si, že funkce vypis nemá ponětí, jak velký kus paměti dostala. Obecně si může být jista jen prvkem v[0], čili *v.

Kdybychom paměť neuvolnili příkazem delete, zůstala by obsazená až do ukončení procesu. V našem případě to vyjde nastejno, ale obecně jde o memory leak.

Pole proměnlivé velikosti
Použijeme std::vector z hlavičkového souboru <vector>:
#ifdef _WIN32
#include "stdafx.h"
#endif
#include <cstdio>
#include <vector>

void vypis(const std::vector<int> &v)
{
	for (unsigned i=0; i<v.size(); ++i) {
		printf("%i\n", v[i]);
	}
}

int main()
{
	std::vector<int> data(10);
	for (int i=0; i<10; ++i) {
		data[i] = i * i;
	}
	vypis(data);
	return 0;
}
Pole pevné velikosti
Použijeme std::array z hlavičkového souboru <array>. V některých kompilátorech je pro to potřeba zapnout standard C++11.
#ifdef _WIN32
#include "stdafx.h"
#endif
#include <cstdio>
#include <array>

void vypis(const std::array<int, 10> &v)
{
	for (unsigned i=0; i<v.size(); ++i) {
		printf("%i\n", v[i]);
	}
}

int main()
{
	std::array<int, 10> data;
	for (int i=0; i<10; ++i) {
		data[i] = i * i;
	}
	vypis(data);
	return 0;
}