Насколько я понимаю, все случаи, когда C должен обрабатывать адрес, включают использование указателя.Например, операнд & создает указатель на программу, а не просто дает пустой адрес в качестве данных (т. Е. Он никогда не дает адрес без предварительного использования указателя):
scanf("%d", &foo)
Или при использовании &операнд
int i; //a variable
int *p; //a variable that store adress
p = &i; //The & operator returns a pointer to its operand, and equals p to that pointer.
Мой вопрос: есть ли причина, по которой программам на С всегда приходится использовать указатель для управления адресами?Есть ли случай, когда C может обрабатывать пустой адрес (числовое значение адреса) самостоятельно или с помощью другого метода?Или это совершенно невозможно?(Это связано с архитектурой системы, изменением распределения памяти во время и во время выполнения и т. Д.).И наконец, было бы полезно, если бы адреса менялись из-за управления памятью?Если бы это было так, это было бы причиной, по которой всегда нужны указатели.
Я пытаюсь выяснить, является ли использование указателей обязательным в стандартизированных языках Си.Не потому, что я хочу использовать что-то другое, а потому, что я хочу знать наверняка, что единственный способ использовать адреса - с помощью указателей, и просто забыть обо всем остальном.
Редактировать: Так как на часть вопроса был дан ответв комментариях Эрика Постпишила, Михаила Маршалека, user3386109, Майка Холта и Гекко;Я сгруппирую эти биты здесь: Да, использование пустых адресов не имеет смысла или бесполезно из-за различных факторов (указатели допускают несколько операций, адреса могут меняться при каждом запуске программы и т. Д.).Как отметил Михал Маршалек (без каламбура), scanf () использует указатель, потому что C может работать только с копиями, поэтому указатель необходим для изменения используемой переменной.то есть
int foo;
scanf("%d", foo) //Does nothing, since value can't be changed
scanf("%d", &foo) //Now foo can be changed, since we use it's address.
Наконец, как упоминал Гекко, существуют указатели для представления косвенности, так что компилятор может различать данные и адреса.
Джон Боде охватывает большинство этих тем вэто ответ, поэтому я отмечу это.