2012-04-28 18 views
5

co będzie wyjście następujący kod
int x,a=3;
x=+ +a+ + +a+ + +5;
printf("%d %d",x,a);
co oznacza znak + po zmiennej?

Ouput jest: 11 3. Chcę wiedzieć, w jaki sposób? i co oznacza znak + po środku?

+7

Po co pisać kod? nie rozumiesz? – cnicutar

+8

Nie jestem pewien, w jaki sposób zostanie to przeanalizowane, ale na pewno wynik jest nieokreślony. – juanchopanza

+0

Czy istnieje ['#define + a + a']? – vard

Odpowiedz

18

Myślę, że DrYap ma to prawo.

x = + + a + + + a + + + 5; 

jest taka sama, jak:

x = + (+ a) + (+ (+ a)) + (+ (+ 5)); 

Główne punkty są tu:

1) c, C++ nie mają + jako operator postfix, więc wiemy, że mamy do interpretować jako przedrostek

2) monadycznego + wiąże silniej (ma wyższy priorytet niż dwójkowym) +

funn tak nie jest? Gdyby to były - znaki nie wyglądałyby tak dziwnie. Monadyczny +/- jest tylko wiodącym znakiem, lub inaczej mówiąc "+ x" jest taki sam jak "0 + x".

+0

tak, to ma sens. Są spacje między znakami, ale jeśli usuniesz spacje, pokazuje błąd kompilacji: 'Wymagana wartość L'. – user980089

+3

Tak, ponieważ jeśli usuniesz spację między '+ +', otrzymasz pojedyncze '++' (operator inkrementacji) zamiast dwóch znaków plusa. –

+1

'+ x' ma być jak' 0 + x' dla dowolnego '0' dla typu' x', ale nie ma takiej gwarancji pod przeciążeniem. Można go nazwać "operatorem rozpadu", ponieważ zwraca on czystą wartość, nawet jeśli jego operand jest l-wartością. Na przykład '++ + a' jest nielegalne, z wyjątkiem przeciążeń, i zwykle nie zwiększa wartości" a ". – Potatoswatter

13

+ Po prostu dostaje się jako + przed następną wartością. Jeśli używasz spójnego rozstaw jest taki sam, jak:

x = + + a + + + a + + + 5; 

Ale nie wszyscy + y są konieczne więc będzie działać tak samo jak robi:

x = a + a + 5; 

gdy wartość jest niezmienna, ponieważ ciebie nigdy nie użyłem inkrementującego operatora, który jest ++ bez białych znaków między dwoma symbolami +. + i ++ to dwa oddzielne operatory.

+4

Dodam, że C ma jednoargumentowe '+', dla symetrii z unarnym minusem '-', i że to właśnie tu się stosuje. Nikt nie wie, co to jest jedno plus za wyjątkiem zagmatwanych programistów. http://msdn.microsoft.com/en-us/library/s50et82s(v=vs.71).aspx –

+0

, ale w tym przypadku tak się nie dzieje, ponieważ wartość a nie jest zwiększana. Przed znakiem a są znaki 3 +. – user980089

+0

Co masz na myśli, że się nie dzieje? – DrYap

3

Kod wydaje się być równoważne:

x= (+(+(a)))+ (+ (+(a)))+ (+(+(5)));

Tj x = a + a + 5. Który jest 11. Wiesz, że możesz umieścić znak + lub - przed numerem, prawda? Teraz te + jedynie wskazują znak zmiennej. Ponieważ znak jest +, zmienna pozostaje niezmieniona, tj. "+5" oznacza "5", więc "+ a" oznacza "a", a "+ + a" oznacza "+ (+ a)", co oznacza "a". W ten sam sposób możesz napisać x = + + + 3 + + + + 3 + + + + 5. Lub x = - + + - 3 + - + - 3 - - + 5;.

3

Ponieważ + operatorzy nie są dwa obok siebie, ale zawsze oddzielone spacją oświadczenie x=+ +a+ + +a+ + +5; jest właściwie odczytywać jako

x=+ (nothing)+a+(nothing) +(nothing) +a+(nothing) +(nothing) +5;

więc w zasadzie ostateczne równanie staje się w tym rodzaju x=a+a+5; i stąd wynik.

0

X = + A + + + A + + + + 5: Jest to równoważne

X = X = + A + + + A + + + + 5 lub możemy napisać X = + (+ A) + (+ (+ a)) + (+ (+ 5)) a znaki + tylko wskazują znaki, które zostaną ostatecznie ocenione jako x = a + a + 5.

Powiązane problemy