Alokacja pamięci a tworzenie stringa z chara

0

Witam,

Mam sobie taki program:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

char* print(char* c);

int main() {

	char a = 'A';

	printf("%s", print(&a));

	getch();
	return 0;

}

char* print(char* c) {

	char *word;
	word = (char*)malloc(sizeof(*word)*3+1);

	word[0] = *c;
	word[1] = 'l';
	word[2] = 'a';
	word[3] = '\0';

	return word;

}

Program wyświetla tekst "Ala". Mam jednak pytanie - czy to jest tak, że alokacja pamięci tworzy w tym wypadku tablicę? Dlaczego potem mogę sobie przypisywać literki do kolejnych indeksów ot tak?

I drugie pytanie. Program działa niezależnie od tego, czy przy mallocu mam sizeof(word) czy sizeof(*word). Czy wynika to z tego, że wielkość wskaźnika do chara i samego chara jest taka sama?

0
  1. Tak tworzy tablicę. Poprzez indeksowanie [] możesz dostawać się po prostu do kolejnych jej elementów, a tak naprawdę do kolejnych danych w pamięci.
  2. sizeof(*word) zwraca jeden bajt - tyle ile zajmuje pojedynczy "char", natomiast sizeof(word) zwraca wielkość wskaźnika - czyli 4 bajty. Stąd tak naprawdę jeżeli używasz sizeof(word) to alokujesz 4 razy tyle pamięci ile potrzebujesz.
0

Dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1