Pretypovanie pointera - alokacia pamati? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pretypovanie pointera - alokacia pamati? – C / C++ – Fórum – Programujte.comPretypovanie pointera - alokacia pamati? – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
devilfish0
Stálý člen
2. 10. 2011   #1
-
0
-

Zdravím,

char pole[100];
int size = 512;
*((int*)pole)=size;

Moja otázka znie čo sa stane? Alokuje sa nová pamäť veľkosti 4B (integer), pôvodná pamäť na adrese 'pole' sa uvoľní a do 'pole' sa priradí adresa nového bloku pamäte a zvyšok pola je navždy stratený? Alebo je to inak?  Respektíve čo sa teda stane?

Nahlásit jako SPAM
IP: 188.121.172.–
KIIV
~ Moderátor
+43
God of flame
2. 10. 2011   #2
-
0
-

"pole" bez indexu je tak jak tak ukazatel na pole znaku... vesmes si prepises prvni 4 bajty integerem... cca na 244, 1, 0, 0  (pokud teda nejsi na nejakem big endian procesoru)

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
devilfish0
Stálý člen
2. 10. 2011   #3
-
0
-

Takže ak som mal napr v pole[1] uložený nejaké dáta tak si ich prepíšem, správne? Respektíve ak sa k nim budem chcieť dostať char znak = *(++pole); tak získam len určitú časť bitov z toho uloženého integeru na pole[0]?

Nahlásit jako SPAM
IP: 188.121.172.–
KIIV
~ Moderátor
+43
God of flame
2. 10. 2011   #4
-
0
-

prepises data na pole[0] az pole[3] ... kdy nejmene vyznamny bajt mas na pozici 0 a tak dale

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
devilfish0
Stálý člen
2. 10. 2011   #5
-
0
-

A bude ešte možné pristupovať k prvkom štýlom pole[0] odkazuje na prvý byte, pole[1] na druhý byte....
Keď dám int cislo = pole[0]; hodí mi to tam ten integer ktorý som uložil?
 

Nahlásit jako SPAM
IP: 188.121.172.–
KIIV
~ Moderátor
+43
God of flame
2. 10. 2011   #6
-
0
-

#5 devilfish
hodi ti to jen jeden byte z nej ... pokud chces cely cislo tak zase pretypovat stejnym zpusobem

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
devilfish0
Stálý člen
2. 10. 2011   #7
-
0
-

   

char pole[100];
char * ptr = pole;
int cislo = 0;
pole[5] = 0; 
pole[6] = 0; 
pole[7] = 0; 
pole[8] = 1; 
cislo = *((int *)(ptr+5));
printf("%d",cislo);

Prečo potom tento kód mi vypíše 16777216? Myslel som ze na adrese pole+5 by malo byť 00000000 to iste na +6 a 7 a na +8 00000001 čiže keď vytiahnem adresu ptr+5 ako integer malo by to zobrať 4B počínajúc od ptr+5 takže 00000000 00000000 00000000 00000001. Kde je chyba?

Nahlásit jako SPAM
IP: 188.121.172.–
m->29+6
Super člen
2. 10. 2011   #8
-
0
-

#7 devilfish
Predpokladám, že tvoj PC je architektúry Little Endian a preto je byte na indexe 8 bytom najviac významným.

Ak chceš aby bol výsledok jedna tak to musíš spraviť opačne. Všeobecne je to ale závislé na architektúre PC. 

#include <stdio.h>

int main(void) {
  char pole[100];

  pole[5] = 1;
  pole[6] = 0;
  pole[7] = 0;
  pole[8] = 0;

  int cislo = *((int *)(pole+5));
  printf("%d",cislo);

  return 0;
}

Nahlásit jako SPAM
IP: 83.240.51.–
devilfish0
Stálý člen
3. 10. 2011   #9
-
0
-

Ďakujem pekne za vysvetlenia ;)

Nahlásit jako SPAM
IP: 188.121.172.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý