Обычно в C разница между двумя указателями - это целое число типа ptrdiff_t
, представляющее расстояние между двумя указанными объектами. Это интерпретация, которая применима здесь, потому что строковый литерал является сокращением для массива символов и, как и любой массив, его использование в выражении приводит к «распаду» массива на указатель на его первый элемент.
Однако "abcd" - "xyz"
- это неопределенное поведение, поскольку вычитание одного указателя из другого определяется только в том случае, если два указателя относятся к объектам в одном массиве. (В противном случае «расстояние между двумя объектами» не имеет смысла.)
В предложенном множественном выборе не указано «Неопределенное поведение» как вариант. Вариант 3 не будет правильным, если вы не знаете что-то о конкретном компиляторе, о котором идет речь: поскольку стандарт не определяет поведение, компилятор может реализовать все, что он считает нужным. Он может принять выражение и вернуть бессмысленный результат, или он может сгенерировать сообщение об ошибке и прервать компиляцию, или он может сделать что-нибудь еще, что сочтет разумным для автора компилятора.
Итак, если бы мне задали этот вопрос , Я бы получил go за ответ 5 («Ничего из вышеперечисленного») и был бы готов объяснить свои рассуждения.