ako zelis nadovezati niz "b" na niz "a" kod ti je sljedeci :
prvo polja bi trebalo dinamicki alocirat pomocu pointera na integer.
dakle ekvivalent
int a[100];
je
int *a = (int *)malloc(sizeof(int) * 100);
i u ovom primjeru mozes direktno radit s clanovima polja kao i s gornjim primjerom statickog alociranja
evo ti primjer :
#include <stdio.h>
#include <stdlib.h>
main()
{
int n_a = 100; //broj elemenata u polju a
int n_b = 80; //broj elemenata u polju b
int i = 0, j = 0;
int *a = (int *)malloc(sizeof(int) * n_a); //alociranje polja a, n_a elemenata
int *b = (int *)malloc(sizeof(int) * n_b); //alociranje polja b, n_b elemenata
//upisivanje elemenata u polja
for(i = 0; i < n_a; i++)
{
printf("upisi element %d polja a ->", (i + 1));
scanf("%d", &a);
}
for(i = 0; i < n_b; i++)
{
printf("upisi element %d polja b ->", (i + 1));
scanf("%d", &b);
}
//realociranje polja a na 180 elemenata
//realloc funkcija ce produziti polje a za jos 80 elemenata
a = (int *)realloc(a, sizeof(int) * (n_a + n_b));
//iskopiraj 80 elemenata polja b od 100 do 180 elementa polja a
//povecaj varijablu elemenata polja a
for(i = n_a, j = 0; i < (n_a + n_b); i++, j++)
a = b[j];
n_a+=n_b;
//ispisi polje a
for(i = 0; i < n_a; i++) printf("%d ", a);
printf("\n");
}
u tvom kodu ti si fiksno alocirao oba polja na 100 elemenata, pa kazes korisniku da upise broj elemenata. taj princip nije nimalo dobar, jer imas limit od 100 elemenata po polju, ako korisnik ide upisat preko 100 elemenata imas gresku, a ako je manje od 100 elemenata imas bespotrebno iskoristenu memoriju.
znaci kod malloc funkcije sintaksa je iduca
tip *var = (tip *)malloc(sizeof(tip) * brojelemenata);
malloc rezervira memoriju na koju neki pokazivac pokazuje. (int *), u gornjem primjeru ti je potreban prije malloc naredbe, da kaze naredbi da se radi o polju integera, jer malloc po defaultu vraca void pokazivac, pa je potreban typecasting radi konverzije tipa. malloc funkcija uzima samo jednu vrijednost, dakle broj byteova koji se alocira. posto je svaki integer na 32-bitnim platformama velik 4 bytea, a ako ima 100 elemenata u polju integera treba alocirati 400 byteova. moguce je i napisati malloc(4 * brojelemenata), ali posto duljine nekih tipova variraju od platforme do platforme ispravnije je napisati malloc(sizeof(int) * brojelemenata), jer ce sizeof operator vratiti duljinu tipa prema platformi na kojoj se program kompajlira.
kod realloca je stvar malo drukcija :
tip *var = (tip *)realloc(var, sizeof(tip) * brojelemenata);
realloc realocira predhodno alociranu memoriju. razlika je sto realloc funkcija prima dvije vrijednosti, prva je memorijska adresa vec alociranog bloka, a druga na koliko se realocira. bitno je primjetit da realloc prima na koliko se realocira, a ne zakoliko se realocira. znaci ako je stari blok velik 400 byteova, a hocemo dodat jos 80 byteova, pisemo realloc(var, 480) a ne realloc(var, 80).
Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.
A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.