Skillnad mellan versioner av "Tips och Trick i C"
Anders (Diskussion | bidrag) (→Antal element i en array) |
Anders (Diskussion | bidrag) (→Antal element i en array) |
||
Rad 27: | Rad 27: | ||
} | } | ||
</pre> | </pre> | ||
− | Däremot kan koden vara direkt farlig om du har en pekare som deklareras separat. | + | Däremot kan koden vara direkt farlig om du har en pekare som deklareras separat. Därför måste du verkligen vara försiktig när du använder detta trick. Kör man exempelvis följande kod: |
+ | <pre> | ||
+ | int main(int argc, char *argv[]) | ||
+ | { | ||
+ | int array[100]; | ||
+ | int *array_p; | ||
+ | |||
+ | array_p = array; | ||
+ | |||
+ | printf("sizeof array: %d\n", sizeof array); | ||
+ | printf("sizeof array_p: %d\n", sizeof array_p); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | Så kommer utskriften att vara: | ||
+ | |||
+ | <pre> | ||
+ | sizeof array: 400 | ||
+ | sizeof array_p: 4 | ||
+ | </pre> | ||
[[category:Programmering]] | [[category:Programmering]] | ||
[[category:Algoritmer]] | [[category:Algoritmer]] |
Versionen från 24 februari 2013 kl. 16.25
Denna sida är under konstruktion och ej färdig ännu och därför kan väsentliga detaljer fortfarande saknas. |
Tilldelning
Problem: I C är syntaxen för tilldelning, =, och för jämförelse, ==, lika nog för att ett litet misstag skall direkt orsaka rejäla problem. Ett exempel är jämförelser inuti if()-satser som kan orsaka smärre katastrofer om man slarvar.
Ponera att vi vill jämföra en variabel a med värdet 5 för att se om variabeln har samma eller ett annat värde. Vi slarvar dock och råkar i stället skriva:
if(a = 5)
Om variabeln a är av sådant slag att jämförelsen fungerar så fungerar även tilldelningen. I ovanstående tilldelas a värdet 5 och eftersom det är skilt från noll innebär det att satsen alltid kommer vara sann.
if(5 = a)
Skriver man på ovanstående sätt så kommer man direkt få ett kompilatorfel vilket gör att hela problemet kan undvikas. Anledningen är naturligtvis att variabeln a:s innehåll ej kan tilldelas en konstant som 5.
Antal element i en array
C saknar denna funktion men du kan implementera den själv enkelt genom följande kod:
{ my_type array[100]; for (i = 0; i < (sizeof array / sizeof *array); i++) { /* ... */ } }
Däremot kan koden vara direkt farlig om du har en pekare som deklareras separat. Därför måste du verkligen vara försiktig när du använder detta trick. Kör man exempelvis följande kod:
int main(int argc, char *argv[]) { int array[100]; int *array_p; array_p = array; printf("sizeof array: %d\n", sizeof array); printf("sizeof array_p: %d\n", sizeof array_p); return 0; }
Så kommer utskriften att vara:
sizeof array: 400 sizeof array_p: 4