Ukazatele na pole charů – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ukazatele na pole charů – C / C++ – Fórum – Programujte.comUkazatele na pole charů – C / C++ – Fórum – Programujte.com

 

garamond
~ Anonymní uživatel
7 příspěvků
29. 11. 2013   #1
-
0
-

Zdravím, mám následně deklarované pole charů:
char string[6]="abcde";

Chápu, že string je adresa na 'a', (string+1) adresa na 'b', ... Ale nechápu, proč &string+1 už není to samé. Jaký je mezi nimi rozdíl? Díky za odpovědi

Nahlásit jako SPAM
IP: 131.117.208.–
garamond
~ Anonymní uživatel
7 příspěvků
29. 11. 2013   #2
-
0
-

#1 garamond
Možná jsem to pochopil.. Je to tak, že když &string je místo v paměti prvního prvku, tak &string+1 bude paměť o 6*sizeof(char) dál, protože 6 je velikost pole...?

Nahlásit jako SPAM
IP: 131.117.208.–
vitamin+8
Grafoman
29. 11. 2013   #3
-
0
-

#2 garamond
Nie, ty vlastne vytvoris adresu adresy (pointer na pointer):

char string[] = "text";	//pointer na prvy prvok pola (pointer bude zrejme constantny)
char *ptr = string;	//pointer na prvy prvok pola
char **ptr2 = &string;	//pointer na pointer(pole) ktory ukazuje na prvy prvok retazca (mozno my tam niekde chyba const)
char **ptr3 = &ptr;	//pointer na iny pointer ktory tiez ukazuje na prvy prvok pola(tu my uz nechyba const :) )
Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
garamond
~ Anonymní uživatel
7 příspěvků
29. 11. 2013   #4
-
0
-

#3 vitamin
Díky, takže když napíšu dejme tomu printf("%c",&string+1), znamená to, že funkci printf předávám jako parametr ukazatel na pole a ten inkrementuju. Velikost pole je 6*sizeof(char)=6, takže ta inkrementace je o tuto hodnotu. To znamená, že jestliže ukazatel na pole předtím ukazoval na první prvek, teďka ukazuje na 7. (což je mimo paměť), že?

Nahlásit jako SPAM
IP: 131.117.208.–
z
~ Anonymní uživatel
268 příspěvků
29. 11. 2013   #5
-
0
-

Ano, je to ukazatel na char[5]. Takže zvýšením o 1 bude podle pointerové aritmetiky ten ukazatel ukazovat o 5 (ne 6) bytů dál.

Nahlásit jako SPAM
IP: 88.101.8.–
vitamin+8
Grafoman
29. 11. 2013   #6
-
0
-

#4 garamond
Toto ti mono pomoze:

#include <stdio.h>

int main(void){
	char string[] = "1234578";

	
	printf("\n&string:     %p\
		\n(&string+1): %p\
		\nrozdiel %dB\
		\nvelkost pola: %d", 
		&string, 
		&string+1, 
		(int)((char*)(&string+1) - (char*)&string),
		(int)sizeof(string)
		);
	
	
	
	return 0;
}
Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
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, 80 hostů

Podobná vlákna

Porovnání charů — založil Ivo

Konstanta charu... — založil Maty

Konstruktor z charu — založil Spectrik

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ý