Jurkins Februāris 20, 2020 Author Share Februāris 20, 2020 (labots) Netaisīšu jaunu tēmu... uint8_t u8arr[] = { 1, 2, 3, 4 }; uint8_t* u8ptr = u8arr; std::cout << static_cast<uint32_t>(*u8ptr++) << static_cast<uint32_t>(*u8ptr++) << static_cast<uint32_t>(*u8ptr++) << static_cast<uint32_t>(*u8ptr++) << "\n\n"; u8ptr = u8arr; std::cout << static_cast<uint32_t>(*u8ptr++); std::cout << static_cast<uint32_t>(*u8ptr++); std::cout << static_cast<uint32_t>(*u8ptr++); std::cout << static_cast<uint32_t>(*u8ptr++) << "\n\n"; rezultāts: WTF? Labots Februāris 20, 2020 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Februāris 20, 2020 Share Februāris 20, 2020 (labots) Šinī gadijuma viss darbojas no otra gala std::cout << static_cast<uint32_t>(*u8ptr++) // (1) << static_cast<uint32_t>(*u8ptr++) // (2) << static_cast<uint32_t>(*u8ptr++) // (3) << static_cast<uint32_t>(*u8ptr++) // (4) << "\n\n"; // (5) Seciba (4) << (5) = a jeb 1\n\n tad (3) << a = b jeb 21\n\n tad (2) << b = c jeb 321\n\n tad (1) << c = d jeb 4321\n\n d = 4321 btw: vari aizstat \n\n ar std::endl Labots Februāris 20, 2020 - AndrisBB Link to comment Share on other sites More sharing options...
AndrisBB Februāris 20, 2020 Share Februāris 20, 2020 (labots) Vari pārbaudīt šādi: std::cout << printf("cetutrais ") << printf("treshais ") << printf("otrais ") << printf("pirmais ") << std::endl; andris@precision ~/Documents/Demo $ ./a.out pirmais otrais treshais cetutrais 10978 Labots Februāris 20, 2020 - AndrisBB Link to comment Share on other sites More sharing options...
Jurkins Februāris 20, 2020 Author Share Februāris 20, 2020 Jā, to es sapratu, ka (nezin kāpēc) darbojas no otra gala, jo sākumā (4) rindiņā nepieliku pointerim "++" (it kā loģiski), bet kaut kā nepadomāju, ka tā tas operators strādā un tā tam jābūt. Paldies! Un tad izrādījās, ka u8ptr = u8arr; printf("%d%d%d%d\n\n", *u8ptr++, *u8ptr++, *u8ptr++, *u8ptr++); dara to pašu. Link to comment Share on other sites More sharing options...
AndrisBB Februāris 20, 2020 Share Februāris 20, 2020 (labots) https://en.cppreference.com/w/cpp/language/eval_order Jeb tavā printf gadījumā, kompilators var izvēlēties secību kādu vien vēlas. Labots Februāris 20, 2020 - AndrisBB Link to comment Share on other sites More sharing options...
Jurkins Februāris 21, 2020 Author Share Februāris 21, 2020 pirms 7 stundām , AndrisBB teica: kompilators var izvēlēties secību kādu vien vēlas Velns?! Es reiz pudu sāls izēdu, nevarēju saprast, kāpēc pārītis SI4432 visu dara pareizi, bet konsolē uztvērējs raksta muļķības. Link to comment Share on other sites More sharing options...
AndrisBB Februāris 21, 2020 Share Februāris 21, 2020 (labots) Nav jau arī skaidrs ko tu vēlies panākt ar tiem pointeriem. Vienkarši izprintejot masīva elementus, sanāks ka kompilators sakompilēs būtiski mazāk koda, plus vieglāk lasāms C kods. printf("%d%d%d%d\n\n", u8arr[0], u8arr[1], u8arr[2], u8arr[3]); vai pat printf("%d%d%d%d\n\n", *(u8arr+0), *(u8arr+1), *(u8arr+2), *(u8arr+3)); Droši vien ka nav jau arī tā ka kompilātors izvēlētos random secību, kādā to visu izpildīt. Ganjau izvēlas tādu secību kura būs ātrāka vai rezultāts aizņems mazāk atmiņas utt. Labots Februāris 21, 2020 - AndrisBB Link to comment Share on other sites More sharing options...
Jurkins Februāris 21, 2020 Author Share Februāris 21, 2020 Nu jā, nav jau tas vajadzīgs. Gribēju saprast, kāpēc tā. Tagad skaidrs. Paldies.? Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!