Ano ang "->" operator sa C ++?

Pagkatapos ng pagbabasa ng Mga Nakatagong Tampok at Madilim na Mga Sulok ng C ++ / STL sa comp.> , ganap na nagulat ako na ang sumusunod na snippet ay naipon at nagtrabaho sa parehong Visual Studio 2008 at g ++ 4.4.

Narito ang code:

 #include <stdio.h> int main() { int x = 10; while (x --> 0) // x goes to 0 { printf("%d ", x); } } 

Gusto ko iminumungkahi na ito ay C, dahil ito ay gumagana sa GCC. Saan ito tinukoy sa pamantayan at kung saan ito nanggaling?

8054
29 окт. itinakda ng GManNickG 29 Oktubre. 2009-10-29 09:57 '09 at 9:57 am 2009-10-29 09:57
@ 25 sagot

--> hindi isang operator. Sa katunayan, ang mga ito ay dalawang hiwalay na mga operator, -- at > .

Binabawasan ng isang kondisyong code ang halaga ng x pamamagitan ng pagbabalik ng orihinal (hindi nabawasan) na halaga ng x , at pagkatapos ay ikukumpara ang orihinal na halaga sa 0 gamit ang operator.

Upang mas mahusay na maunawaan ang expression ay maaaring nakasulat tulad ng sumusunod:

 while( (x--) > 0 ) 
7743
29 окт. sumagot na ibinigay kay Charles Salvia sa Oktubre 29 2009-10-29 10:00 '09 sa 10:00 2009-10-29 10:00

O para sa isang bagay na ganap na naiiba ... x slips sa 0

 while (x --\ \ \ \ > 0) printf("%d ", x); 
border=0

Hindi kaya mathematically, ngunit ... ang bawat larawan ay kumukuha ng isang libong salita ...

2564
18 янв. ang sagot ay binibigyan ng hindi naka- sync na Jan 18 2012-01-18 14:18 '12 sa 14:18 2012-01-18 14:18

Ito ay isang kumplikadong operator, kaya kahit na ang ISO / IEC JTC1 (Joint Technical Committee 1) ay naglagay ng paglalarawan nito sa dalawang magkakaibang bahagi ng C ++ Standard.

Pagtutukso sa gilid, ang mga ito ay dalawang magkaibang mga operator: -- at > , inilarawan ayon sa pagkakabanggit sa seksyon 5.2.6 / 2 at sa seksyon 5.9 ng pamantayan ng C ++ 03.

2265
29 окт. ang sagot ay ibinigay ni Kirill V. Lyadvinsky noong ika-29 ng Oktubre. 2009-10-29 11:38 '09 sa 11:38 am 2009-10-29 11:38

Katumbas ito

 while (x-- > 0) 

x-- (pagkatapos x-- ) ay katumbas ng x = x-1 kaya ang code ay na-convert sa:

 while(x > 0) { x = x-1; // logic } 
1183
29 окт. Ang sagot ay ibinigay ni Jay Riggs sa 29 oct. 2009-10-29 10:00 '09 sa 10:00 2009-10-29 10:00

x maaaring pumunta sa zero kahit na mas mabilis sa kabaligtaran direksyon:

 int x = 10; while( 0 <---- x ) { printf("%d ", x); } 

8 6 4 2

Maaari mong kontrolin ang bilis gamit ang arrow!

 int x = 100; while( 0 <-------------------- x ) { printf("%d ", x); } 

90 80 70 60 50 40 30 20 10

;)

961
28 дек. ang sagot ay ibinigay doc 28 dec. 2014-12-28 03:32 '14 sa 3:32 2014-12-28 03:32

Ito ay

 #include <stdio.h> int main(void){ int x = 10; while( x-- > 0 ){ // x goes to 0 printf("%d ", x); } return 0; } 

Lamang espasyo ay gumagawa ng mga bagay na masaya, bumababa at > naghahambing.

513
29 окт. ang sagot ay ibinigay RageZ 29 Oktubre. 2009-10-29 10:00 '09 sa 10:00 2009-10-29 10:00

Gamitin --> ay may makasaysayang kabuluhan. Ang pag-decrementing ay (at pa rin ay sa i>--> , ipalagay na ang x sumasalamin sa 0 at tumutukoy sa mga may mathematical na background.

380
18 нояб. Ang sagot ay ibinigay ni Matt Joiner noong 18 Nobyembre. 2009-11-18 15:47 '09 sa 15:47 2009-11-18 15:47
 while( x-- > 0 ) 

kung paano ito nasuri.

332
29 окт. sumagot na ibinigay ni Grumdrig Oktubre 29. 2009-10-29 10:00 '09 sa 10:00 2009-10-29 10:00

Talagang geek, ngunit gagamitin ko ito:

 #define as ;while int main(int argc, char* argv[]) { int n = atoi(argv[1]); do printf("n is %d\n", n) as ( n --> 0); return 0; } 
310
18 мая '10 в 23:33 2010-05-18 23:33 ang sagot ay ibinigay ni Escualo noong Mayo 18 '10 sa 23:33 2010-05-18 23:33

Isang aklat na nabasa ko (hindi ko matandaan kung anong aklat ito) ang nagsasabi: Tinutulungan ng mga tagatala na i-parse ang mga expression sa pinakamalaking token gamit ang kaliwang-kaliwang tuntunin.

Sa kasong ito, ang pananalita:

 x-->0 

Parsis para sa pinakamalaking mga token:

 token 1: x token 2: -- token 3: > token 4: 0 conclude: x-- > 0 

Nalalapat din ang parehong tuntunin sa pananalitang ito:

 a-----b 

Pagkatapos ng pag-parse:

 token 1: a token 2: -- token 3: -- token 4: - token 5: b conclude: (a--)-- - b 

Umaasa ako na ito ay tumutulong upang maunawaan ang kumplikadong expression ^ ^

291
09 апр. ang sagot ay ibinigay ng NguyenDat 09 Abril 2010-04-09 03:04 '10 sa 3:04 2010-04-09 03:04

Ito ay eksaktong kapareho ng

 while (x--) { printf("%d ", x); } 

para sa mga di-negatibong numero

246
31 дек. ang sagot ay ibinigay ng Mabuting Tao sa Disyembre 31 2009-12-31 16:48 '10 sa 16:48 2009-12-31 16:48

Sa anumang kaso, mayroon na tayong operator na "darating." "-->" madaling matandaan bi>

Bi>"for (x = 10; x > 0; x --)" sa i>

224
29 окт. sagot na ibinigay Test Oktubre 29. 2009-10-29 17:45 '09 sa 17:45 2009-10-29 17:45

Unang inihahambing ng code na ito ang x at 0, at pagkatapos ay nag-decrement x. (Gayundin, ang unang sagot ay nagsasabing: nag-post ka ng x-decrement, at pagkatapos ay ihambing ang x at 0 sa operator.) Tingnan ang Output ng code na ito:

 9 8 7 6 5 4 3 2 1 0 

Ngayon kami ay unang ihambing at pagkatapos ay bumaba, nakakakita ng 0 sa output.

Kung nais naming mabawasan muna at ihambing, gamitin ang code na ito:

 #include <stdio.h> int main(void) { int x = 10; while( --x> 0 ) // x goes to 0 { printf("%d ", x); } return 0; } 

Ang konklusyon na ito:

 9 8 7 6 5 4 3 2 1 
206
18 нояб. Ang sagot ay ibinigay ni Sajad Bahmani Nobyembre 18 2009-11-18 15:52 '09 sa 15:52 2009-11-18 15:52

Ang aking tagatala ay mag-print 9876543210 kapag pinatakbo mo ang code na ito.

 #include <iostream> int main() { int x = 10; while( x --> 0 ) // x goes to 0 { std::cout << x; } } 

Tulad ng inaasahan. Ang halaga while( x-- > 0 ) nangangahulugang while( x > 0) . x-- post decrements x .

 while( x > 0 ) { x--; std::cout << x; } 

- Ito ay isa pang paraan upang isulat ang parehong bagay.

Mabuti na ang orihinal na hitsura "habang x napupunta sa 0".

160
17 янв. ang sagot ay ibinigay cool_me5000 17 jan. 2010-01-17 03:46 '10 sa 3:46 2010-01-17 03:46

Wa>-- at > . x post ay decremented, i.e. Bumababa pagkatapos suriin ang kondisyon x>0 ? .

133
ang sagot ay ibinigay sa Mr. 28 дек. X 28 Dis 2009-12-28 19:32 '10 sa 19:32 2009-12-28 19:32

-- - Pag- decrement ng operator, at > - operator higit pa .

Ang dalawang operator ay inilalapat bi>--> .

124
06 апр. sumagot sam 06 apr. 2010-04-06 13:45 '10 sa 13:45 2010-04-06 13:45

Ito ay isang kumbinasyon ng dalawang mga operator. Ang una -- inilaan upang mabawasan ang halaga, at > upang masuri kung ang halaga ay mas malaki kaysa sa tamang operand.

 #include<stdio.h> int main() { int x = 10; while (x-- > 0) printf("%d ",x); return 0; } 

Ang output ay:

 9 8 7 6 5 4 3 2 1 0 
117
02 апр. Sagot na ibinigay ni Rajeev Das Abril 2. 2013-04-02 14:22 '13 sa 2:22 pm 2013-04-02 14:22

Sa katunayan, x post-decremented at ang kundisyong ito ay nasuri. Ito ay hindi --> , ito (x--) > 0

Tandaan: ang halaga ng x nagbabago pagkatapos suriin ang kondisyon, dahil ito ay post-decremented. Ang i>

 --> x-->0 ++> x++>0 -->= x-->=0 ++>= x++>=0 
112
18 авг. Ang sagot ay ibinigay ng AndroidLearner 18 aug. 2012-08-18 10:34 '12 sa 10:34 ng umaga 2012-08-18 10:34

C at C ++ sundin ang "maximum munch" rule. Tulad ng --- b ay isinalin sa (a--) - b , sa iyong kaso x-->0 isinalin sa (x--)>0 .

Kung ano talaga ang sinasabi ng panuntunan ay ang kilusan mula kaliwa hanggang kanan, ang mga expression ay nabuo sa pamamagitan ng paggamit ng isang maximum na mga character na bumubuo ng tamang pagpapahayag.

105
10 февр. Ang sagot ay ibinigay ng Pandrei 10 Peb. 2014-02-10 20:29 '14 sa 20:29 2014-02-10 20:29

Bakit ang lahat ng mga komplikasyon?

Isang simpleng sagot sa orihinal na tanong:

 #include <stdio.h> int main() { int x = 10; while (x > 0) { printf("%d ", x); x = x-1; } } 

Ang parehong bagay. Hindi sinasabi na dapat mong gawin ito tulad nito, ngunit ginagawa niya ang parehong at sasagutin ang isang tanong.

x-- ay isang shorthand para sa itaas, at > ay mas normal kaysa sa x-- operator . Wa>

Maraming mga tao ang gumagawa ng mga simpleng bagay sa sandaling ito;)

23
27 окт. Sagot ay ibinigay Garry_G Oktubre 27. 2016-10-27 18:09 '16 sa 6:09 ng hapon 2016-10-27 18:09

Sa pangkaraniwang paraan, tinutukoy namin ang kalagayan sa mga braket ng " () " loop at ang kondisyon ng pagwawakas sa loob ng kulot na mga bracket " {} ", ngunit ito at > ay ang paraan na ang lahat ay tumutukoy sa lahat nang sabay-sabay. Halimbawa, halimbawa:

 int abc(){ int a = 5 while((a--) > 0){ // Decrement and comparison both at once // Code } } 

Sinasabi nito, binabawasan ang a at nagsisimula sa pag-ikot hanggang sa oras na a mas malaki sa 0

Ang isa pang paraan dapat ito ay:

 int abc(){ int a = 5 while(a > 0){ // Code a = a -1 // Decrement inside loop } } 

sa parehong direksyon, ginagawa namin ang parehong at makamit ang parehong mga layunin.

20
28 мая '17 в 23:10 2017-05-28 23:10 ang sagot ay ibinigay Zohaib Ejaz Mayo 28, '17 sa 23:10 2017-05-28 23:10

Hindi pinapahintulutan ng C / C ++ ang mga puwang na may kondisyon. Mahalaga, ang code

 while (x --> 0) 

ito ay katulad ng

 while (x-- > 0) 

o

 while(x > 0){ x = x - 1 ... 

Paggamit ng post-decrement sa kondisyon. Sabihin nating x = 10 . Ang kondisyon operator ay magiging 10>0 at printf("%d ", x); ang operator sa loop ay magbibigay ng 9 sa unang run. Para sa ikalawang run, ang kondisyon ay 9>0 at ang seal ay magiging katumbas ng 8 at iba pa hanggang sa kundisyon 0>0 .

0
06 сент. ang sagot ay ibinigay Zirc 06 sep. 2018-09-06 00:20 '18 sa 0:20 2018-09-06 00:20

--> ay karaniwang ang parehong bagay bi>

  for(x=10; x<1; ++x) cout<<x 

nahanap mo ang lahat ng mga numero sa pagitan ng x at ang ibinigay na numero.

-1
Sagot na ibinigay ni Aleks. 14 апр. S. Apr 14 2018-04-14 21:59 '18 sa 9:59 ng gabi 2018-14-14 21:59

Kung kai>

  #include <stdio.h> int main() { int x {10}; while (x ++< 20) // x increments to 20 { printf("%d ", x); } } 

Resulta:

11 12 13 14 15 16 17 18 19 20

-1
13 июля '18 в 18:34 2018-07-13 18:34 Sinagot ni TrevorLee ang 13 Hulyo '18 sa 6:34 ng gabi 2018-07-13 18:34

Talaga → hindi isang operator. Ito ay isang kumbinasyon ng dalawang hiwalay na mga operator - at>

Kumuha tayo ng isang halimbawa. Habang (x → 0) Ito ay isang kumpidensyal na pagpapahayag na may isang kumpirmasyon. Dito, ang unang x ay ang pagbawas na may halaga nito, at pagkatapos ay inihambing sa 0.

-4
06 дек. Sumagot na ibinigay ni Lovekush Vishwakarma Disyembre 06 2017-12-06 16:45 '17 sa 4:45 ng hapon 2017-12-06 16:45

Iba pang mga katanungan tungkol sa mga tag o Magtanong ng isang katanungan