pointers
Источник https://proproprogs.ru/c_base/c_ukazateli-proshche-prostogo
Указатели
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main(void)
{
char d = 10;
char *gpt;
gpt = &d;
printf("gpt = %p, *gpt = %d, d = %d\n", gpt, *gpt, d);
*gpt = 100;
printf("gpt = %p, *gpt = %d, d = %d\n", gpt, *gpt, d);
return 0;
}
ещё
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main(void)
{
int arg = 7;
int *ptr_arg, *ptr;
ptr_arg = &arg;
ptr = ptr_arg;
printf("*ptr = %d, arg = %d\n", *ptr, arg);
*ptr_arg = 100;
printf("*ptr = %d, arg = %d\n", *ptr, arg);
return 0;
}
и ещё
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(void)
{
int g = 476789;
char *ptr = (char *)&g;
for(int i = 0;i < sizeof(g); ++i) {
printf("%d ", *ptr);
ptr++;
}
return 0;
}
char *ptr = (char *)&g;
Здесь объявляется указатель ptr на тип char, который инициализируется адресом переменной g. Это означает, что ptr теперь указывает на первый байт в памяти, где хранится значение переменной g.
int x = *ptr + 1;
Здесь происходит интересный момент. Значение переменной g имеет тип int и занимает несколько байтов в памяти. Но указатель ptr интерпретируется как указатель на char, что означает, что он будет читать данные из памяти по байтам. Таким образом, *ptr прочитает первый байт из переменной g, а затем к нему прибавится 1.
printf("x = %d\n", x);
Здесь значение x выводится на экран. Поскольку *ptr прочитал первый байт из переменной g, то x будет равно значению этого байта, увеличенному на 1.
swap_2 Поменять местами значения двух переменных
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void swap_2(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
int main(void)
{
int x = 5, y = 10;
swap_2( &x, &y );
return 0;
}