Tips och Trick i C: Skillnad mellan sidversioner

Från Täpp-Anders
Hoppa till navigering Hoppa till sök
Created page with "{{ofärdig}} == 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 prob..."
 
 
(7 mellanliggande sidversioner 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 13: Rad 12:
  if(5 = a)
  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.
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:Algoritmer]]

Nuvarande version från 24 februari 2013 kl. 14.27

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