Gå til innhold

For each? Hvor? (C)


Anbefalte innlegg

Holder på å prøve å lære meg C, og har en del spørsmål.

 

1.

Jeg kan ikke finne noen for each funksjon, fins dette, hvis ikke, hvordan skal jeg gjøre dette?

 

2.

Hva er forsjellen mellom "int main", "void main" og simpelthen "main".

 

3.

Om jeg ikke har misforstått 100% så vil "char" deklarere et tegn, mens "char*" en string?

 

 

EDIT:

 

Mvh; ze5400

 

Beklager at dette er easypin for dere folks her, men tidligere har jeg bare erfaring fra .NET, php :)

Endret av ze5400
Lenke til kommentar
Videoannonse
Annonse
1.

Jeg kan ikke finne noen for each funksjon, fins dette, hvis ikke, hvordan skal jeg gjøre dette?

7982946[/snapback]

http://einaros.blogspot.com/2007/01/newfan...k-dirty-or.html

http://einaros.blogspot.com/2007/02/iterat...-benchmark.html

 

2.

Hva er forsjellen mellom "int main", "void main" og simpelthen "main".

7982946[/snapback]

 

Dette er signaturen på startfunksjonen for konsollprosjekter. I nyere C/C++-standarder er det "int main" som er den eneste tillatte. Det vil kort og godt si at funksjonen heter main, og at den returnerer et heltall.

 

3.

Om jeg ikke har misforstått 100% så vil "char" deklarere et tegn, mens "char*" en string?

7982946[/snapback]

 

char* er en peker til et tegn i minnet. Typisk bruker man slike pekere til å peke til første tegn i en streng. Du burde strengt tatt bevege deg over på C++ i stedet for C, og da bruke klassen std::string -- som virkelig forenkler strengbehandling.

Lenke til kommentar

1 for settningen går fint til dette, selv om det finnes andre måter å gjøre slike løkker med, som while men da må man gjøre litt mer for å få det til å fungere

int i;
int array[60]
for(i = 0; i<60; i++)
array[i] = i;

kode gir arrayet verdiene fra 0 til 59

 

3 char vil gi deklarer en primitiv av typen char mens char* vil deklarere en peker til char.

Lenke til kommentar

Mange takk for svar :)

 

Forklarte en del :)

 

@einaros

Grunnen til at jeg vil lære C før C++ er det at jeg kjører kun linux, og om jeg ikke har misforstått helt er de fleste linux programmer lagd i C og ikke C++.

Er greit om jeg kunne lært meg såpass C at jeg kan endre litt på noen av programmene, for å tilpasse de litt :)

Lenke til kommentar

for å bruke strings i C må du bare bruke en array av chars.

 

feks:

 

char navnpåstring[20] vil være en et ord som er 20 bokstaver langt... du kan gjøre ganske mye med disse "stringene" også om du inkluderer feks string.h og sikkert noen andre jeg .h jeg ikke husker:)

 

for å peke på en bestemt bokstav i dette "ordet" bruker du da feks navnpåstring[3]... for å peke på "hele" ordet (med andre ord, første bokstav..eller navnpåstring[0] da..) bruker du bare navnpåstring.

 

jeg synes ikke man må lære C++ først for å lære seg C..syntes det hørtes tungvindt ut å lære C++ for å så regne med at da lærer man seg C også når det var C man i utgangspunktet ville lære.. men nå kan ikke jeg C++ i det hele tatt, og er ingen racer i C heller, så skal ikke påstå for mye:)

 

(bare at C såvidt jeg har skjønt skal være veldig lett å lære om man kan litt om programmeringssynaks fra før)

Endret av Elenion
Lenke til kommentar
(bare at C såvidt jeg har skjønt skal være veldig lett å lære om man kan litt om programmeringssynaks fra før)

7987594[/snapback]

 

Da tror jeg du blander C med Java, PHP, Python, Basic eller bortimot hvilket som helst annet (script)språk med GC :)

Lenke til kommentar
Men, hva om jeg ikke vet hvor mange chars stringen skal inneholde da?

 

Om stringen er større en variablen den skal lagres på, resulterer jo det i buffer overflow og krasjing av programmet...

 

vel da får man malloce masse med plass og bruke free etterpå da:P

 

jeg blandet ikke. men jeg skal ikke skrive her at C er superlett, synes det er litt vanskelig å lære seg jeg:) men det er jo et ganske kjapt og rett frem språk da, er det ikke? for å lære java må du jo feks lære å tenke litt objektorientert og sånn (men det kan han nok allerede). men folk er jo forskjellige.

 

poenget mitt var vel bare at personen ville lære c, og da synes jeg det er et dårlig tips å be han lære c++ istedet. han klarer sikkert fint å lære seg c direkte...

Lenke til kommentar
poenget mitt var vel bare at personen ville lære c, og da synes jeg det er et dårlig tips å be han lære c++ istedet. han klarer sikkert fint å lære seg c direkte...

7988707[/snapback]

 

Den debatten har vi hatt i bøtter og spann her allerede :) Mitt argument er kort og godt at C++ tillater objektorientering, som i seg selv er en deilig, deilig ting, samtidig som språket (og standardbibliotekene) løser en god del av problemene C introduserte (og fortsatt holder på). Og når det er sagt, så er det ingenting som tvinger deg til å skrible i C på noen plattform i utgangspunktet, så da virker det som man bare holder på noe gammelt og lurvete fordi man *vil* :whistle:

 

Anyhoo .. To each his own. Jeg kom via C, og skriver det fremdeles fra tid til annen, men hadde jeg i dag hatt muligheten til å gå tilbake, ville jeg definitivt valgt C++ som utgangspunkt i stedet. Da slipper man å streve med fjåsete uvaner i årevis etter at man har "sett lyset" i andre språk (for all del, det finnes mange alternativer til C++ også).

Endret av einaros
Lenke til kommentar
Men, hva om jeg ikke vet hvor mange chars stringen skal inneholde da?

 

Om stringen er større en variablen den skal lagres på, resulterer jo det i buffer overflow og krasjing av programmet...

7988259[/snapback]

Det er blant annet i slike tilfeller at std::string er praktisk. Den tar seg av det på egen hånd. Det du eventuelt kan gjøre, er å lage en string-klasse selv, men da blir det straks litt mer bry..

Lenke til kommentar
Men, hva om jeg ikke vet hvor mange chars stringen skal inneholde da?

 

Om stringen er større en variablen den skal lagres på, resulterer jo det i buffer overflow og krasjing av programmet...

7988259[/snapback]

 

Vel enten så vet du hvor lang den er ellers så har du en null terminert string.

Hvis du ikke har noen av delene så er du på kjøre uansett om du bruker std::string eller ikke.

 

du kan bruke srtlen til å finne ut hvor lang en null terminert string er.

 

Men hvis strengen forandrer størelse (først og fremst blir større) så har du et problem som blir litt mer komplisert å løse.

Lenke til kommentar
Vel enten så vet du hvor lang den er ellers så har du en null terminert string.

Hvis du ikke har noen av delene så er du på kjøre uansett om du bruker std::string eller ikke.

 

Jeg forsto ikke helt hva du mener her, std::string holder alltid rede på lengden sin, uten bruk av nullterminering. I hvilke situasjoner ser du for deg at bruk av std::string er usikkert?

 

std::string er jo mye mer dynamisk, for eksempel dersom man skal utvide lengden på strengen. For å kunne bruke char array tilsvarende enkelt som std::string blir man nødt til å finne på noe eget som tar seg av manipulering. Dette er en kilde til mange unødvendige feil, og hvis du bruker C++ blir det litt som å finne opp kruttet på nytt etter min mening.

Lenke til kommentar
Vel enten så vet du hvor lang den er ellers så har du en null terminert string.

Hvis du ikke har noen av delene så er du på kjøre uansett om du bruker std::string eller ikke.

 

Jeg forsto ikke helt hva du mener her, std::string holder alltid rede på lengden sin, uten bruk av nullterminering. I hvilke situasjoner ser du for deg at bruk av std::string er usikkert?

 

std::string er jo mye mer dynamisk, for eksempel dersom man skal utvide lengden på strengen. For å kunne bruke char array tilsvarende enkelt som std::string blir man nødt til å finne på noe eget som tar seg av manipulering. Dette er en kilde til mange unødvendige feil, og hvis du bruker C++ blir det litt som å finne opp kruttet på nytt etter min mening.

7997342[/snapback]

 

Jeg tenkte at situasjonen var den at du har en C-string og ikke vet noe mer om lengden, noe som ofte er situasjonen i libs skrevet i C og/eller mot C.

 

Men jeg støtter også bruken av std::string hvis noen lurte :)

Endret av Giddion
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...