можно использовать префикс и запись одновременно для переменной в c - PullRequest
3 голосов
/ 12 августа 2010
#include <stdio.h> 

int main()
{
    char *q;
    char *p = "sweta";
    q = ++p++;
    printf("%s", q);
}

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

Ответы [ 4 ]

6 голосов
/ 12 августа 2010

q = ++p++; это даже не скомпилируется в C или в C ++

Оператор постинкремента имеет более высокий приоритет , чем оператор предварительного инкремента

Так что q= ++p++интерпретируется как q = ++(p++).Теперь оператор постинкрементного выражения возвращает выражение rvalue, тогда как оператор прединкремента требует, чтобы его операндом был lvalue.

ISO C99 (Section 6.5.3.1/1)

Constraints

Операнд префиксного оператора увеличения или уменьшения должен иметь квалифицированный или неквалифицированный вещественный или указательный тип и должен быть изменяемым lvalue .

3 голосов
/ 12 августа 2010

Это нельзя сделать, так как вы не можете увеличить временный объект.

1 голос
/ 12 августа 2010

Не пытайтесь слишком умно и не нажимайте на язык, на котором он не должен идти.Это когда-нибудь тебя укусит.Или укусите своего клиента, и он укусит вас.

Просто будьте в здравом уме и запишите это так:

#include <stdio.h> 

int main()
{
    char* q;
    char* p = "sweta";
    q = p++;
    q = ++p;
    printf("%s\n", q);
}

, что дает мне это:

eta
1 голос
/ 12 августа 2010

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

Если вы хотите увеличить переменную на два при копировании нового значения в q, вы можете использовать q=(p+=2); вместо q=++p++;

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