Действительно ограничивает справку в C, если указатель уже является отмеченной константой?

22
задан Luchian Grigore 22 January 2013 в 09:11
поделиться

2 ответа

Ваш указатель является константой, говоря любому вызывающему Вашу функцию, что Вы не коснетесь данных, на которые указывают через ту переменную. К сожалению, компилятор все еще не будет знать, является ли результатом псевдоним указателей константы. Можно всегда использовать указатель неконстанты в качестве указателя константы. Например, много функций берет символ константы (т.е. строка) указатель в качестве параметра, но, при необходимости можно передать его указатель неконстанты, функция просто делает Вас обещанием что это использование привычки что конкретный указатель для изменения чего-либо.

В основном, для получения ближе к вопросу необходимо было бы добавить, ограничивают a и b, чтобы 'обещать' компилятор, который, кто бы ни использует эту функцию, не передаст в результате как псевдоним к a или b. Принятие, конечно, Вы в состоянии сделать такое обещание.

15
ответ дан falstro 29 November 2019 в 04:47
поделиться

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

1
ответ дан 29 November 2019 в 04:47
поделиться