05. februar 2004 - 11:23Der er
13 kommentarer og 1 løsning
lidt div. omkring grundlæggende forståelse af C
Jeg er efterhånden blevet gammel i gårde.. men når det kommer til C er jeg helt som en lille baby..
Derfor ville jeg meget gerne vide lidt om datastruktur i C - er der nogen der kan fortælle mig lidt om det evt. ved hjælp af et lille program og så fortælle mig hvor man kan se evt. datastruktur... Derudover vil jeg gerne vide lidt om hvordan man implementere programmer skrevet i C.
Meget gerne eks. så kan jeg bedre forstå det, men også gerne straight tekst som forklare det eller links til hvor jeg kan læse det.. Kender godt siderne fra SSLUG så med mindre der et sted lige præcis står noget om ovenstående - så behøver I ikke henvise der til!
Som I nok kan læse ud af ovenstående spørgsmål er det især det "millitære" i koden jeg vil vide lidt om.. Jeg er jo også gammel millitærmand så derfor kan jeg godt lide orden..
Den største forskel i C i forhold til andre sprog ligger formentlig i den hyppige brug af pointere. Det vil sige at mange steder referere man ikke til elementet selv men adressen i lageret, hvor det ligger. Lidt kode:
int x = 1, y = 2, z[10]
int *ip; // ip er en pointer til int ip = &x; //ip peger nu på x y = *ip // y er nu 1 *ip = o; //x er nu 0 ip = &z[o]; //ip peger nu på z[0]
Det er altså sådan at man referere til f.eks. int i C.
C er jo ikke objekt orienteret, og der er derfor ikke klasser og andet stads. Dette er der i C++. Derfor hvis du er vandt til f.eks java, vil jeg råde dig til at bruge c++. Her ligger de største forskelle i pointers og at der i c++ ikke er en garbage collector, hvilket vil sige at du selv skal ryde op efter dig selv. Dette gøres ved commandoen free eller delete som frigøre den plads der er blevet allokeret i lageret. Man behøver ikke at ryde op efter en pointer. Når du har vendet dig til at ryde op efter dig selv (brug af datastrukturer og objekter etc.) og har fundet ud af pointere, er der kun en lille syntaks forskel fra java.
nej. Det kommer an på hvad du anser som datastrukturer. Hvis integer er en datastruktur så er det ikke pointeren der definere den. integer er også en type i sig selv, men man bruger bare pointere til at referere til dem. Med dette menes, at den funktion f.eks. ville være forkert:
void swap(int x, int y){ int temp; temp = x; x = y; y = temp; }
Denne funktion ville korrekt se således ud:
void swap(int *px, int *py){ int temp;
temp = *px; *px = *py; *py = temp; }
Dette skyldes at C benytter call by value ved den første funktion.
Her er en masse online tutorials og guides, de er rigtig gode for en som ikke ved det store omkring c programmering. De fortæller en masse gode ting og sager omkring c programmering, og nogle løsninger til små problemer.
Derudover kan det nævned, at men i c bruger en .h fil for at kunne kalde funktioner fra en fil i en anden fil. F.eks er der denne klasse i c++: (dyn_array.cpp)
void dyn_array::expand(){ int* a = new int[(int)ceil(size * K)]; for(int i = 0; i < num; i++){ a[i] = E[i]; } delete[] E; //Free whatever E points to E = a; //E points to array size = (int)ceil(K * size); }
void dyn_array::contract(){ int* a = new int[(int)ceil(size/K)]; for(int i = 0; i < num; i++){ a[i] = E[i]; } delete[] E; //Free whatever E points to E = a; //E points to a size = (int)ceil(size/K); }
For at bruge disse funktioner i en anden fil/klasse laves en .h fil:
class dyn_array{ // Private variables double K; // K-value int size; // Size of dynamic array int num; // Number of elements int* E;//int_array; // The internal array
void table_insert(int x); // Insert element x void table_delete(); // Delete last element in list HuffNode& get_item(int i); // Return item i HuffNode& operator[](int i); int get_num(); // Return number of elements int get_size(); // Return size of dynamic array int main(); };
ok - synes ikke det er helt nemt - måske jeg er for gammel til at starte på at kode...
Vil datastruktur kunne være int, char osv men også arrays??
Og hvad med hensyn til implementeringen??
Ved implementeringen er der så forskel på om man programmere med tråde eller processer.. Jeg kan se i denne tutorial jeg har fået af min arbejdsgiver, at der er et eksempel på "de spisende filosoffer" og her skal jeg vælge mellem at kode det med tråde eller processere - hvad er smartest og hvorfor?? hvad er forskellen på tråde og processer??
int, char etc. er typer. Mens lister, arrays etc. datastrukturer. Man kan også opbygge sine egne strukturer.
Med hensyn til processer og tråde fandt jeg blandt andet dette:
On Linux, there is no real difference between threads and processes. On some other systems, there is unnecessary overhead for processes. "Threads" are from a programming perspective multiple points of execution that share an awful lot of state. Which basically, processes can be if you tell them to share this state.
>From a system perspective threads are a hack to avoid a lot of the overhead processes have poisoning caches and setting up and tearing down page tables and such. Linux processes don't have this level of overhead.
So -ON LINUX- there isn't much difference between threads and processes. Because the process overhead threads try to avoid has been optimized away, and thus there is a real world implementation of the two concepts which behaves in an extremely similar manner. Thus the conceptual difference between the two is mostly either artificial or irrelevant, certainly in this context. If there is a context without this difference, then in other contexts it would appear to be an artifact of implementation.
On Solaris there is a difference between threads and processes, but the reason is that Solaris' processes are inefficient (and shown by the benchmarks you don't seem to like).
jeg undskylder for den ulejlighed det åbenbart har skabt... jeg troede godt andre måtte deltage.. Det ligger bare mget nær op af en opgave vi har fået på stuidet, min arbejdsgiver ;-), og derfor ville jeg, som ikke er nogen ørn til at kode i C - bare lige have uddybet det lidt... jeg undskylder
jeg læser ikke på KUA - det er muligt at personen web_the_world skriver at han/hun er gammel, men jeg er sgu nok endnu ældre og kan derfor nok ikke lige få lov til at læse på KUA mere....
Det var så lidt, men det var også et spm. rettet mo web the world, da jeg kiggede hans gamle spm. igennem.
Derudover er der ikke alders begrænsning på universiteterne. Jeg læser på samme hold som efterlønnere o.lig.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.