Advertisement
vmeansdev

Pointers basic 3

Apr 17th, 2020
505
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.05 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // Указатели
  5.  
  6. // Зачем вообще нужны указатели?
  7.  
  8. // В языке С аргументы в функции передаются ПО ЗНАЧЕНИЮ
  9. // это значит, что когда мы передаём аргумент при вызове функции
  10. // мы передаём копию
  11. // и никак не можем её изменить
  12. // Смотри Пример 1 в main()
  13.  
  14. void tryToChangeValue(int value) {
  15.     value = 5;
  16. }
  17.  
  18. // Как видно, ничего не произошло, если мы меняем значение аргумента
  19. // это никак не влияет на него снаружи этой функции
  20.  
  21. // но что, если мы хотим менять значение аргумента внутри функции так
  22. // чтобы после вызова функции аргумент имел изменённое значение?
  23. // УКАЗАТЕЛИ! Смотри Пример 2 в main()
  24.  
  25. void actuallyChangeValue(int *value) {
  26.     *value = 5;
  27. }
  28.  
  29. // Указатель это переменная, которая хранит тип и адрес
  30. // зная адрес в памяти, можно поменять значение
  31.  
  32. // по такому принципу работает, например функция scanf()
  33. // Смотри Пример 3
  34.  
  35. int main() {
  36.     // Пример 1
  37.     int a = 10;
  38.     printf("Значение а до вызова функции: %d\n", a);
  39.     tryToChangeValue(a);
  40.     printf("Значение а после вызова функции: %d\n", a);
  41.  
  42.     // Пример 2
  43.     int b = 0;
  44.     printf("Значение b до вызова функции: %d\n", b);
  45.     actuallyChangeValue(&b);
  46.     printf("Значение b после вызова функции: %d\n", b);
  47.  
  48.     // Пример 3
  49.     int c;
  50.     printf("Введите число: ");
  51.     scanf("%d", &c);
  52.     printf("Вы ввели число %d\n", c);
  53.  
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement