Skillnad mellan versioner av "Tips och Trick i C"

Från Täpp-Anders
Hoppa till: navigering, sök
(Antal element i en array)
 
(5 mellanliggande versioner av samma användare visas inte)
Rad 2: Rad 2:
  
 
== Tilldelning ==
 
== 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.
 
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.
  
Rad 14: Rad 13:
  
 
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.
 
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 en del implementerar den själv med hjälp av sizeof-funktionen. Det kan vara fullständigt livsfarligt att göra, ta en titt på följande kod där ''array'' och ''array_p'' skall vara helt ekvivalenta men ger helt olika svar.
 +
<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>
 +
 +
Kör du koden kommer utskriften att vara:
 +
 +
<pre>
 +
sizeof array:  400
 +
sizeof array_p: 4
 +
</pre>
  
 
[[category:Programmering]]
 
[[category:Programmering]]
 
[[category:Algoritmer]]
 
[[category:Algoritmer]]

Nuvarande version från 24 februari 2013 kl. 16.27

Varning.jpg

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 en del implementerar den själv med hjälp av sizeof-funktionen. Det kan vara fullständigt livsfarligt att göra, ta en titt på följande kod där array och array_p skall vara helt ekvivalenta men ger helt olika svar.

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;
}

Kör du koden kommer utskriften att vara:

sizeof array:   400
sizeof array_p: 4