Tips och Trick i C: Skillnad mellan sidversioner

Från Täpp-Anders
Hoppa till navigering Hoppa till sök
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. 14.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