Стандарт C 2018 гласит, в пункте 6.5.3.2, параграф 2: «Операнд унарного оператора *
должен иметь тип указателя». Если k
- указатель на целое число, то *k
-целое число, не являющееся типом указателя, поэтому оно не может быть операндом унарного оператора *
.Таким образом, такое выражение, как x = **k
нарушает это правило.
Правило ins 6.5.3.2 2 является ограничением, означающим, что для создания диагностического сообщения требуется соответствующий компилятор, а стандарт C не определяетповедение.
Технически, компилятор C мог бы, в дополнение к выдаче диагностического сообщения, принять выражение и определить, как пожелает.Я не знаю ни одного, кто это делает, и ни один из распространенных компиляторов не делает этого.
Возможно, символы **k
могут появиться в каком-то большем выражении, где они оба не действуют как унарные операторы *
,например, в x = y**k
, что эквивалентно x = y * *k
, в котором первый *
является оператором двоичного умножения.Вы должны показать точный текст , показанный в вашем учебнике.