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
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
#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 :) )
#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?
#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;
}
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku