Почему указатели такие большие в C? - PullRequest
2 голосов
/ 29 сентября 2019

Я понимаю предпосылку указателей, но я нахожу это очень раздражающим, и я не понимаю, почему это считается полезным:

#include <stdio.h>
int main () {
   int *ptr, q;
   q = 50;
   ptr = &q;
   printf("%d", *ptr);
   return 0;
}

Почему это фундаментальная концепция?

1 Ответ

5 голосов
/ 29 сентября 2019

Во-первых, параметры, передаваемые в функцию, могут быть только примитивами: int, char, long .... или указателями.Затем, если вам нужно передать более сложный элемент, такой как массив (строки) или функцию, вы должны передать ссылку на этот элемент.

Второе, о чем я могу быстро подумать: параметры всегдапередается по «значению».Это означает, что вызываемая функция получает только копию вашей переменной.Таким образом, изменения коснутся только копии, исходная переменная останется неизменной.Если вы передаете переменную с помощью «ссылки» с указателем, сам указатель является неизменным, но, поскольку он является ссылкой на исходную переменную, любая модификация указанного элемента также повлияет на переменную в функции вызывающей стороны.Другими словами, если вы хотите создать функцию, которая может изменять переменную, вы должны передать ей указатель на эту переменную, чтобы добиться этого.

...