int i = 3; // переменная типа int
int *p = 0; // указатель на переменную типа int
p = &i; \\ указатель р указывает на переменную i
*p = 10; \\ изменяется ячейка по адресу p, т.е. i
// array 1 2 3 4 5 0 0 0 0 0
int m[10] = { 1, 2, 3, 4, 5};
m[i] => *(m + i)
int m[10] = {1, 2, 3, 4, 5};
int *p = &m[0]; // адрес начала массива
int *q = &m[9]; // адрес последнего элемента массива
(p + k)
- сдвиг на k
ячеек типа int вправо(p - k)
- сдвиг на k
ячеек типа int влево(q - p)
- количество ячеек между указателямиp[k]
- эквивалентно *(p + k)
int m[10] = {};
for (int *p = m; p < m+9; ++p)
{
*p = (p - m) + 1;
}
// массив заполнен числами от 1 до 10
int max_element (int *m, int size) {
int max = *m;
for (int i = 1; i < size; ++i) {
if (m[i] > max) {
max = m[i];
}
}
return max
}
bool contains(int *p, int *q, int value) {
for (;, p!=q, ++p) {
if (*p == value) {
return true;
}
}
return false;
}
int * max_element (int *p, int *q) {
int* pmax = p;
for(; p != q; ++p) {
if (*p > *pmax) {
pmax = p;
}
}
return pmax;
}
bool max_element (int *p, int *q, int *res) {
if (p == q) {
return false;
}
*res = *p;
for(; p!=q; ++p) {
if (*p > *res) {
*res = *p;
}
}
return true;
}
*
и &
).С++
введены ссылки void swap (int & a, int & b) {
int t = b;
b = a;
a = t;
}
int *p; // ok
int &l; // error
int *p = 0; // ok
int &l = 0; // error
int a = 10;
int b = 20;
int *p = &a; // р указывает на а
p = &b; // p указывает на b
int &l = a; // l ссылается на а
l = b; // a присваивается значение b
int * foo() {
int a = 10;
return &a;
}
int & bar() {
int b = 20;
return b;
}
int *p = foo(); // runtime error
int &l = bar(); // runtime error
С помощью ссылки сделать параметром функции массив заданной длинны
void foo(int (&a)[3]) { /* ... */ }
const
.
int foo(string const &s) { /* нельзя менять значение s */ }