Advertisement
Guest User

Untitled

a guest
Apr 11th, 2019
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. int function (char data[5]) и
  2. int function (char *data)
  3. int function (int *data)
  4. int function (double *data) и тд
  5. Фактически одно и тоже. Адрес в памяти на оригинал. Меняешь в функции - меняешь и оригинал.
  6. void function (int *data) //адрес на ячейку, где лежит оригинал
  7. {
  8. data = 12; //перетер, что лежало в оригинале
  9. }
  10.  
  11. main()
  12. ...
  13. int a = 5;
  14. function(a);
  15. //а теперь равно 12
  16.  
  17. int function (char data)
  18. int function (int data)
  19. int function (double data) и тд
  20. Передаешь КОПИЮ переменой
  21.  
  22. void function (int data) //тут не адрес, тут новая копия переменной по другому адресу
  23. {
  24. data = 12; //перетер копию, оригинал не пострадал
  25. }
  26.  
  27. main()
  28. ...
  29. int a = 5;
  30. function(a);
  31. //а все равно 5
  32.  
  33. Вывод, массивы передается через указатель, а не копию. При передаче копии - ничего не меняется. При передаче указателя - переписываешь значения по этому адресу.
  34.  
  35. Теперь const
  36.  
  37. void function (const int *data) //адрес на ячейку, где лежит оригинал. Но компилятору говорим - менять нельзя!
  38. {
  39. data = 12; //вот тут у тебя ошибка компиляции будет, так как ты говорил, что значение константное. Т.е. это не защита времени выполнения, это защита при КОМПИЛЯЦИИ.
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement