Я где-то нашел вопрос ... вот он и его ответ с объяснением.
main()
{
char *p="hai friends",*p1;
p1=p;
while(*p!='\0') ++*p++;
printf("%s %s",p,p1);
}
Answer:
ibj!gsjfoet
Explanation:
++*p++ will be parse in the given order
* p, то есть значение в местоположении, указанном в данный момент p, будет принято
++ * p полученное значение будет увеличено
когда;встречается место, которое будет увеличиваться, то есть будет выполняться p ++
Следовательно, в цикле while начальное значение, на которое указывает p, равно 'h', которое изменяется на 'i' путем выполнения ++ * p и указателяперемещается в точку, «а», которая аналогичным образом меняется на «б» и так далее.Точно так же пустое пространство преобразуется в «!».Таким образом, мы получаем значение в p, которое становится «ibj! Gsjfoet», и поскольку p достигает «\ 0» и p1 указывает на p, таким образом, p1 ничего не печатает.
Я нашел что-то не так с объяснением на p1. Я думаю, что p1должен вывести «hai friends», и вывод p в порядке, как указано.
, но когда я попытался запустить тот же код на компиляторе gcc, он выдал ошибка сегментации
вот точный код, который я пытался запустить ..
#include<stdio.h>
int main()
{
char *p="hai friends",*p1;
p1=p;
while(*p !='\0') ++*p++;
printf("%s %s",p,p1);
return 0;
}
Если возможно отредактировать заголовок, я не смог найти подходящий заголовок, который бы объяснил ситуацию более четко.
РЕДАКТИРОВАТЬ:
Я пытался запустить измененный код, как предложено Mysticial , но я думаю, что вывод должен быть -
ibj!gsjfoet hai friends
, потому что яувеличивая только p0, но p1 должно быть в качестве начального места, то есть по начальному адресу строки. Пожалуйста, если кто-нибудь может объяснить это, где я получаю это неправильно ???