Что будет выводом printf ("% s", * & * str);где в str указатель? - PullRequest
0 голосов
/ 10 июня 2019

это был фрагмент кода, запрошенный для меня в интервью, и, пожалуйста, объясните мне, что такое & .

#include<stdio.h>
int main()
{
char *str="INCLUDEHELP";
printf("%s",*&*str);
}

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

&* - пустая операция.&*str (или как &*&*&*&*&*&*&*&*&*str или любое число &*) эквивалентно просто str.См. C11 note102 .Мы можем опустить его.

char *str="INCLUDEHELP";
printf("%s", *str);

Этот код с %s недействителен.%s ожидает массива char с нулем в конце.*str - это char со значением 'I', символ.Программа в Linux-подобных системах, скорее всего, получит сигнал об ошибке сегментации, потому что 'I' будет недопустимым адресом массива символов с нулевым символом в конце.

Если это было бы:

char *str="INCLUDEHELP";
printf("%c", *str);

или:

#include<stdio.h>
int main()
{
char *str="INCLUDEHELP";
printf("%c",*&*str);
}

, тогда программа напечатает один символ I на stdout.

0 голосов
/ 10 июня 2019

Скорее всего, выводом является segfault. Так как это неопределенное поведение. &*... от правильного среднего. Разыменуйте указатель, получите адрес разыменованного символа и снова разыщите этот адрес, передав символ вместо указателя на printf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...