Gå til innhold

Student program 'C' | Lært om pekere !


Anbefalte innlegg

Så den siste uken har jeg lært 'C'. Etter to år ved og surre rundt og ikke greie og bestemme meg for et språk. Noe som er simpeltent helt for jævelig. Følelsen av og ikke komme noe sted. Stuck med og lage det samme kalkulator programmet om og om igjen. Noe som har ført til store perioder hvor jeg ikke har drevet med noe programmering. Men den siste tiden har jeg drevet mye med Java. Som lærte meg litt mer. Men Java er ikke min favoritt pga syntaxen i det. Så så litt på 'C'. Og det føltes veldig bra ut og skrive kode og lære. Pga det er ganske Basic språk som ligger nærme kjernen.

 

Nok om det. Lærte om pekere igår, noe som var et levende helvette fordi jeg ser ingen grunn til og bruke det utenom i store programmer for og ikke bruke for mye minne. Noe som sikkert er lurt men jeg ikke ser så mye på enda.

 

 

 

Dette programmer spør etter etternavn. Og visse karakterer i fag. Så får du tilbake gjenomsnitt ut av dette. Senere skal jeg legge til så dette blir skrivd til en fil. Som du kan åpne, se på osv. Men det tar vi litt senere.

 

Her er programmet vært fall. :

 

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

   typedef struct
   {
    char *name;
    int scienceGrade, historyGrade, mathGrade, englishGrade;
   } reportCard;
//prototypes
void printReportCard (reportCard *rc);
   int main()
   {
    reportCard rc;
    printf("Enter the student's last name: ");
    char str[20];
    scanf("%s", str);
    rc.name = str;
    printf("Science Grade: ");
    scanf("%i", &rc.scienceGrade);
	 printf("History Grade: ");
    scanf("%i", &rc.historyGrade);
	 printf("Math Grade: ");
    scanf("%i", &rc.mathGrade);
	 printf("English Grade:  ");
    scanf("%i", &rc.englishGrade);
    printReportCard(&rc);
    return 0;
   }
void printReportCard (reportCard *rc)
{
   int average = (rc->scienceGrade + rc ->historyGrade + rc -> mathGrade + rc -> englishGrade) / 4;
   printf ("Student's Name: %s\nOverall Grade: %i\n",rc->name, average);
}

 

 

 

Bruker en serie på youtube som ser ut til og være ganske grei. Også startet smått og lese en bok.

 

 

Hva trur dere ?

Lenke til kommentar
Videoannonse
Annonse
  • 4 uker senere...

 

---snip---

Dette programmer spør etter etternavn. Og visse karakterer i fag. Så får du tilbake gjenomsnitt ut av dette. Senere skal jeg legge til så dette blir skrivd til en fil. Som du kan åpne, se på osv. Men det tar vi litt senere.

 

---snip----

 

Hva trur dere ?

 

Jeg vil anta at du egentlig ikke vil bruke int for å beregne snittet. Det vil jo ikke bli spesielt nøyaktig.

Lenke til kommentar
  • 2 uker senere...

Du vil helst også bruke scanf("%19s", str); for å lese etternavnet, så du ikke overskrider lengden på bufferet du lagrer det i - eller eventuelt kan du bruke getline for å lese tekst av vilkårlig lengde. (Dessuten vil scanf stoppe ved første mellomrom, om jeg leser manpagen riktig - kjedelig om etternavnet er "van Damme".)

Endret av Djn
Lenke til kommentar
  • 1 måned senere...

Pekere er vanskelig å forstå i høynivåspråk fordi de ikke brukes på en naturlig måte relativt til hardwaren. Om du sliter med å forstå pekere i c++ så er det helt naturlig for c++ pekere handler lite om å virkelig forstå pekere, men mer om å forstå språket.

 

Tro det eller ei, men alt i c++ programmet ditt er pekere. Selv navnet på en prosedyre er en peker. Du bruker pekere hele tiden, selv når du tror du ikke bruker pekere.

 

Når du kaller en prosedyre så benytter du deg av en peker. Når du refererer variabler så benytter du deg av en peker. Når du kaller opp com interface metoder så benytter du deg av en peker. Når du benytter deg av objekter så benytter du deg av en peker.

 

Men i c++ verdenen så har de likevel definert pekere som en unik entitet og avgrenset eller innsnevret pekere til et eget felt, hvilket kan være useful, men det lærer deg ikke nødvendigvis hva som er riktig. Derfor er pekere i c++ en språklig forståelse, og ikke en teknisk forståelse, og ingen skam å være vantro der. :)

 

I høynivåspråk så lærer en seg å bruke pekere og det blir en vane, man skjønner at innholdet i en variabel tolkes som en peker til en annen plass, og til slutt så blir det en vane, men man får aldri denne praktiske erfaringen med hva pekere faktisk er for noe. I språket så har vi et innsnrevret felt som kalles pekere og dette feltet eksisterer av en eneste årsak, det er fordi høynivåspråk er en forenkling av maskinspråk, forenkling krever et sett med regler, og disse reglene gjør at pekere må innsnevres til et unaturlig felt. Det er hele årsaken.

 

Det er pga reglene som som en simplifisering krever som gjør at pekere får en unaturlig forklaring. Forklaringen for hvorfor ting er slik og slik vil alltid være for lite tilfredsstillende for en programmerer, og han vil alltid føle seg litt usikker på pekere på tross av at han er klinkende sikker på hvordan han bruker de. En teknisk forståelse vil for alltid gjøre deg bombesikker på pekere, føle deg trygg på hva det er. Derfor anbefaler jeg å studere litt assembler og se på pekere på lavt nivå. Den tryggheten du bygger opp der vil gjøre deg mer trygg på c++.

 

Det er litt som å fly, du lærer deg å kjenne flyets dynamikk og instinktivt vet du hvordan du flyr, men du føler deg ikke trygg på flyving før du lærer deg bernoulli prinsippene, gravitasjon, vekt, energimestring, navigasjon etc. Først når det er på plass kan man virkelig sette pris på hva en driver på med.

Endret av LonelyMan
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...