C

  • Začetnik teme Začetnik teme Jeki
  • Datum pokretanja Datum pokretanja
mozhda je 'makro'..kad on u program dok prevodi ubaci text f-je na mesto gde se poziva, a ne poziva je
mozda se misli na to

imam ja pitanje: kako se pishe "pokazivac na niz od 5 char-ova", i kako se dodeljuje toj promenljivoj vrednost tj nizu
 
da krenemo redom, f-je sa promenljivim brojem argumenata... to se ne koristi bash cesto, ali evo ti jedne karakteristicne upotrebe(takav je kod u Advanced unix programming)....f-ja sluzi za ispis greske i prekid programa i nisam pisao komentare, jer je u sustini sve elementarno

void error_fatal(char* format,...){
va_list arguments;
va_start(arguments,format);
vfprintf(stderr,format,arguments);
va_end(argumetns);
exit(EXIT_FAILURE);
}


sad mozes f-ju da pozivash sa koliko hoces argumenata ukoliko se desi greska u programu,npr:
if (argc!=2)
error_fatal("%s koriscenje: %s option\n",argv[0],argv[0]);


ili bilo kako drugacije....sto se tiche makroa neke f-je mogu se implementirati a neke ne, to ti pishe u opisu(u linux-u man stranica za datu f-ju)... a to znachi kao sto je jagodica rekla da se kod umece na mesto poziva umesto sto se vrsi f-jski poziv(trebalo bi da je jasno svima sta sve znachi poziv f-je, ukratko cuvanje raznih registara na stek itd)...ovde toga nemash tak oda je program brzi

pokazivach na niz je u stvari pokazivach na pokazivach(jer je ime niza pokazivach na prvu lokaciju u memoriji gde je smesten niz), ali tu mora da se koristi alokacija/dealokacija memorije najcesce...pristup *ime[index]=c ako ne gresim, a nadam se da ne gresim
 
:P pohvala
milos12345:
pokazivach na niz je u stvari pokazivach na pokazivach(jer je ime niza pokazivach na prvu lokaciju u memoriji gde je smesten niz), ali tu mora da se koristi alokacija/dealokacija memorije najcesce...pristup *ime[index]=c ako ne gresim, a nadam se da ne gresim

da da tako je, samo kada tumacim ispadne:
[] ima prednost nad *, znaci *a[1] je prvi clan niza pokazivaca na char? definisano je kao char (*a) [5]
znaci, imam niz pokazivaca?
onda je char *a[5] niz od 5 pokazivaca na char?
a char (*a) [5] niz od 5 charova, pa pokazivac
hm :I
 
Anonymous:
:P pohvala
da da tako je, samo kada tumacim ispadne:
[] ima prednost nad *, znaci *a[1] je prvi clan niza pokazivaca na char? definisano je kao char (*a) [5]
znaci, imam niz pokazivaca?
onda je char *a[5] niz od 5 pokazivaca na char?
a char (*a) [5] niz od 5 charova, pa pokazivac
hm :I

eh sad...mala greska kod tebe prvo, niz krece od 0 tako da je prvi clan [0]........*a[0] je prvi clan prvog niza :o) jer ti je *a niz pokazivacha a samo a je pokazivach na taj niz (ovo je stvarno zakomplikovano)..bilo kako bilo citaj deklaraciju sa desne strane i naici ces na resenje
 
ali kad bolje razmislim ti imash niz od 5 charova i ako 'oces da ti nesto pokazuje na taj niz uzmesh samo obican pokazivach, mislim malo je nejasno pitanje jer je ime niza pokazivach
 
/* metoda izbora i linearnog pretrazivanja */

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 20

main()
{
int i,j,nadjen,pom,niz[MAX],broj;
int opcija;

while(1)
{
//stampanje originalnog niza

printf("\nNiz: ");
for(i=0;i<MAX;i++)
printf("%d ",niz=rand()/((double)RAND_MAX+1)*10);

printf("\nDa li zelite da sortirate niz u neopadajuci poredak?\n(d/n):");
opcija=getch();
if(opcija=='d' || opcija=='D')
{
for(i=0;i<MAX-1;i++)
for(j=i+1;j<MAX;j++)
if(niz>niz[j])
{
pom=niz;
niz=niz[j];
niz[j]=pom;
}

for(i=0;i<MAX;i++)
printf("%d ",niz);


}
else
break;

printf("\n");

printf("\nUnesite broj za pretrazivanje: ");
scanf("%d",&broj);

nadjen=0; // pretrazivanje
for(i=0;i<MAX;i++)
if(niz==broj)
{
nadjen=1;
printf("\nzadati broj je nadjen u %d. elementu niza\n",i+1);
}

if(!nadjen)
{
printf("\nNije nadjen zadati broj\n");
}

}

printf("\n");
}
 
Anonymous:
Anonymous:
Niz od 5 pokazivaca na char

ali ne bi trebalo da su ista, * je nizeg prioriteta od [] ? koja je ovo, prva ili druga?

trebalo bi da su isto jagodice :) prilikom deklaracija promenljivih * oznacava da se radi o pointeru, oba izraza predstavljaju istu stvar.

znaci a[0]...,a[4] je tipa char* u oba slucaja.
 
jagodica:
(*a) [5] - pokazivac na niz od 5 charova

Znaci ovo jeb* nase koke a petao nije. Jednostavno tako nesto ne postoji, pokazivac uvek pokazuje na prvi element nekog niza sa druge strane ti opusteno mozes u svom programu da uzimas a[6] ili a[-1] Samo sto ces uzimati neke druge vrednosti sa steka(takav tip gresaka naziva se buffer overflow i najcesce se koristi pri hakerskim upadima). Pre svega niz se isto vidi pokazivac.Ovo je identicno kada vidis negde u programu a[3] == *(a+3), cak neki prevodioci prilikom prevodjenja transformisu a[3] u *(a+3) u prvoj fazi prevodjenja.
 
ma ja mislim da nije isto... ali da ne vrtimo vishe
razmislicu pa cu da napishem
znam za ovo a+3 i da pokazuje na prvi ali kao da naglasish u kodu
ali verovatno ste u pravu
ali hocu i ja da budem u pravu
 

Back
Top