C ++ 'daki "->" operatoru nədir?

comp.> saytında gizli xüsusiyyətləri və C ++ / STL comp.> oxuduqdan sonra comp.> , tamamilə şaşırdım ki, aşağıdakı parçanı tərtib edib, həm Visual Studio 2008, həm də g ++ 4.4-də işləmişdir.

Kod burada:

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

GCC-də olduğu kimi bu C olduğunu düşünürəm. Standartda harada müəyyənləşdirilmişdir və nereden gəlir?

8054
29 окт. GManNickG tərəfindən 29 oct tərəfindən təyin olundu . 2009-10-29 09:57 '09 saat 09:57 'da 2009-10-29 09:57
@ 25 cavab

--> operator deyil. Əslində, bunlar iki ayrı operatordur --> .

Şərti kod, xin orijinal (azaldılmış) dəyərini qaytararaq x dəyərini azaldır və sonra operatoru istifadə edərək orijinal dəyəri 0 ilə müqayisə edir.

Sözləri daha yaxşı başa düşmək üçün aşağıdakı kimi yaza bilərsiniz:

 while( (x--) > 0 ) 
7743
29 окт. 29 Oktyabrda Charles Salvia'ya cavab verdi 2009-10-29 10:00 '09 10:00 'da, 2009-10-29 10:00' də

Və ya tamamilə fərqli bir şey üçün ... x 0-ə slips

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

Rəqəmsal deyil, amma ... hər bir şəkil min sözləri çəkir ...

2564
18 янв. Cavab 18 yanvarda uyğunsuzlaşdırılır 2012-01-18 14:18 '12 saat 14:18 'da 2012-01-18 14:18

Bu çox mürəkkəb bir operatordur, hətta ISO / IEC JTC1 (Birgə Texniki Komitə 1) təsvirini C ++ Standardının iki müxtəlif hissəsində yerləşdirir.

Yanına qəribə olaraq, bunlar iki fərqli operatordur: --> , müvafiq olaraq 5.2.6 / 2 bölməsində və C ++ 03 standartının 5.9 bölməsində təsvir edilmişdir.

2265
29 окт. Cavab 29 oktyabrda Kirill V. Lyadvinsky tərəfindən verilir . 2009-10-29 11:38 '09 at 11:38 am 2009-10-29 11:38

Bu, ekvivalentdir

 while (x-- > 0) 

x-- ( x-- sonra) x = x-1 bərabərdir x = x-1 belə ki, kod çevrilir:

 while(x > 0) { x = x-1; // logic } 
1183
29 окт. Cavab 29 oktyabrda Jay Riggs tərəfindən verilir . 2009-10-29 10:00 '09 10:00 'da, 2009-10-29 10:00' də

x əks istiqamətdə daha sıx x gələ bilər:

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

8 6 4 2

Sürəti ox ilə idarə edə bilərsiniz!

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

90 80 70 60 50 40 30 20 10

;)

961
28 дек. cavab 28 doc verilir . 2014-12-28 03:32 '14 da 3:32 2014-12-28 03:32

Odur

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

Yalnız kosmik əyləncələr verir, azalır və müqayisə edir.

513
29 окт. Cavab RageZ 29 oct verilir . 2009-10-29 10:00 '09 10:00 'da, 2009-10-29 10:00' də

İstifadə --> tarixi əhəmiyyətə malikdir. X86 arxitekturasını artımdan daha sürətli azaltma (və hələ də bəzi hallarda olur). --> , x yaxınlaşdığını və riyazi mənşəyə malik olanlara aid olduğunu düşünün.

380
18 нояб. Cavab 18 İyul tarixində Matt Katilən tərəfindən verilir. 2009-11-18 15:47 '09 da 15:47 'də 2009-11-18 15:47
 while( x-- > 0 ) 

necə təhlil edilir.

332
29 окт. Grumdrig tərəfindən verilmiş cavabı Oct 29. 2009-10-29 10:00 '09 10:00 'da, 2009-10-29 10:00' də

Tamamilə geek, amma bu istifadə edəcəyəm:

 #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 Cavab Escualo tərəfindən 18 May 'da 23:33' də verildi 2010-05-18 23:33

Oxuduğum bir kitab (hansı kitabın nə olduğunu xatırlamıram) deyilir: Derleyiciler, ifadələri sol soldan qayda ilə ən böyük mö'cüzəyə ayırmağa çalışırlar .

Bu vəziyyətdə ifadə:

 x-->0 

Ən böyük ayələr üçün Parsis:

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

Eyni qayda bu ifadəyə aiddir:

 a-----b 

Ayrıştırıldıktan sonra:

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

Ümid edirəm ki, bu kompleks ifadəni ^^ anlamağa kömək edir

291
09 апр. Cavab NguyenDat tərəfindən verilir 09 Apr 2010-04-09 03:04 '10 at 3:04 2010-04-09 03:04

Bu tam olaraq eynidır

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

qeyri-mənfi ədədlər üçün

246
31 дек. Cavab 31 dekabrda Yaxşı Kişi tərəfindən verilir. 2009-12-31 16:48 '10 saat 16:48 'da 2009-12-31 16:48

Hər halda, indi bir operator "gəlir". "-->" bir istiqamət kimi yadda saxlamaq asandır və "x yoxsa" "düz" deməkdir.

Bundan əlavə, bəzi platformalarda "for (x = 10; x > 0; x --)" ə qədər bir az daha səmərəlidir.

224
29 окт. Cavab verilmişdir Test 29 oktyabr. 2009-10-29 17:45 '09 at 17:45 'da 2009-10-29 17:45

Bu kod əvvəlcə x və 0-i müqayisə edir və sonra x'ları azaldır. (Həmçinin, birinci cavabda deyilir: x-post-xəttini x, sonra isə x və 0-i operator ilə müqayisə edin.) Bu kodun çıxışı:

 9 8 7 6 5 4 3 2 1 0 

İndi ilk olaraq müqayisə etməliyik və nəticədə azaldıq.

İlk olaraq azaltmaq və müqayisə etmək istəyirsinizsə, bu kodu istifadə edin:

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

Bu nəticə:

 9 8 7 6 5 4 3 2 1 
206
18 нояб. Cavab Səid Bəhmani tərəfindən verilir 2009-11-18 15:52 '09 da 15:52 'da 2009-11-18 15:52

Bu kodu çalıştırdığınızda derleyici 9876543210 yazdırır.

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

Gözlənildiyi kimi. while( x-- > 0 ) while( x > 0) dəyəridir. x x-- azaldılması x .

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

- Bu eyni şeyi yazmanın başqa bir yoludur.

Orijinalin "x 0-ə gedərkən" göründüyü gözəldir.

160
17 янв. Cavab cool_me5000 17 yanvar verilir . 2010-01-17 03:46 '10 at 3:46 2010-01-17 03:46

--> arasında boşluq yoxdur. x poçtu azaldılır, yəni. şəraitin yoxlanılmasından sonra azalır x>0 ? .

133
Cavab cənabə verildi. 28 дек. X 28 Dek 2009-12-28 19:32 '10 saat 19:32 'da 2009-12-28 19:32

-- operatorun azaldılması> - operator daha .

İki operator bir tətbiq edilir, məsələn --> .

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

Bu, iki operatorun birləşməsidir. Birincisi dəyəri azaltmaq məqsədi daşıyır və > dəyərin sağ operandan daha böyük olub olmadığını yoxlamaq üçün.

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

Çıxış olacaq:

 9 8 7 6 5 4 3 2 1 0 
117
02 апр. Rajeev Dasın verdiyi cavab 02 Aprel. 2013-04-02 14:22 '13 at 2:22 pm 2013-04-02 14:22

Əslində, x sonradan azaldılır və bu vəziyyət yoxlanılır. Bu deyil --> , (x--) > 0

Qeyd: vəziyyətin yoxlanılmasından sonra x dəyişiklikləri, post-pilləli olduğundan. Bəzi oxşar vəziyyətlər də ola bilər, məsələn:

 --> x-->0 ++> x++>0 -->= x-->=0 ++>= x++>=0 
112
18 авг. Cavab AndroidLearner 18 aug tərəfindən verilir . 2012-08-18 10:34 '12 saat 10:34 'da 2012-08-18 10:34

CC ++ "maksimum munch" qaydasına əməl edin. Bildiyiniz kimi, --- b (a--) - b , x-->0 (x--)>0 .

Əsas qayda nədir ki, hərəkət soldan sağa, ifadələr düzgün ifadəni meydana gətirən maksimum simvol qəbul edərək formalaşır.

105
10 февр. Cavab Pandrei 10 fevralda verilir. 2014-02-10 20:29 '14 saat 20:29 2014-02-10 20:29

Niyə bütün fəsadlar?

Orijinal sualına sadə bir cavab:

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

Eyni şey. Bunu belə etməli deyirsiniz, amma eynidır və bir sualına cavab verər.

x-- - yuxarıda göstərilənlər üçün bir x--x-- operator daha normaldır. Böyük sirr yoxdur!

Hal-hazırda sadə şeylər edən bir çox insan var;)

23
27 окт. Cavab 27 oktyabrda Garry_G verildi . 2016-10-27 18:09 '16 saat 6:09 'da 2016-10-27 18:09

Normal şəkildə, biz " () " loopunun mötərizəsində və " {} " əyri mötərilərin içindəki sonlandırma vəziyyətini müəyyənləşdiririk, lakin bu və > hər kəs bir anda hər şeyi müəyyən etdiyi şəkildədir. Məsələn, məsələn:

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

Deyir ki, a azaldır və zaman a qədər 0 qədər dövrü başlayır

Başqa bir şəkildə olmalıydı:

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

Hər iki istiqamətdə də eyni şeyi edirik və eyni məqsədlərə nail oluruq.

20
28 мая '17 в 23:10 2017-05-28 23:10 Cavab Zohaib Ejaz 28 may, '17 saat 23:10 2017-05-28 23:10 'də verilir

C / C ++ şərtləri olan boşluqları nəzərə almır. Əsasən kod

 while (x --> 0) 

bu da eynidır

 while (x-- > 0) 

və ya

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

Vəziyyətdən sonrakı azalma istifadə. x = 10 demək. Vəziyyət operatoru 10>0printf("%d ", x); olacaqdır printf("%d ", x); döngə operatoru ilk işdə 9 verəcək. İkinci qaçış üçün vəziyyət 9>0 olacaq və mühərrik 80>0 şəraitinə qədər bərabər olacaq.

0
06 сент. Cavab Zirc 06 sep verilir . 2018-09-06 00:20 '18 'də 0:20' də 2018-09-06 00:20 'də

--> əsasən eyni şeydir:

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

x və verilən nömrə arasında bütün nömrələri tapırsınız.

-1
Aleks tərəfindən verilmiş cavab . 14 апр. S. Apr 14 2018-04-14 21:59 '18 saat 09:59 'da 2018-14-14 21:59

Əgər tərsini etmək üçün bir funksiyanı yazmalı olsaydınız, sintaksis daha da aydındır, əvvəlcə görmədim ki, düşünmürəm:

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

Nəticə:

11 12 13 14 15 16 17 18 19 20

-1
13 июля '18 в 18:34 2018-07-13 18:34 TrevorLee 13 iyul '18 'də saat 18:34' də 2018-07-13 18:34 'a cavab verdi

Əslində → bir operator deyil. Bu, iki ayrı operatorun - və> birləşməsidir

Məsələn nümunə götürək. (X → 0) Bu bir təsdiq ilə bir məxfi ifadəsidir. Burada, ilk x, dəyəri ilə azalma və sonra 0 ilə müqayisə edilir.

-4
06 дек. Lovekush Vishwakarma tərəfindən verilmiş cavab 06 dekabr 2017-12-06 16:45 '17 saat 16:45 'da 2017-12-06 16:45

Etiketler haqqında digər suallar və ya bir sual