Ohjelmointi 2 / 2010
gcc -save-temps hopo.c
#define pois return 0; #include <stdio.h> #define HALPA=HINTA; #define auto "Mosse" #define Tul "Terve" #define kaa "tuloa" #define TASTA int main(void){ #define TAHAN pois } #define VAHAN #define PP ; #define VEROJA (1+40 prosenttia) PP #define plus * #define on = #define HINTA=7; #define lf "\n" #define prosenttia / 100.0 TASTA int maksu on HALPA plus VAHAN VEROJA printf("auto on vanha, mutta halpa: %d!\n",maksu) PP printf(Tulkaa " kyytiin!" lf) PP TAHAN
int a,b,c;
int *p;
int e;
/* 1 */ a = 19;
/* 2 */ p = &b;
/* 3 */ *p = a+2;
/* 4 */ p = p+1; /* Tekee käytännössä p=p+2 */
/* 5 */ *p = 7;
/* 6 */ p = p+2; /* Tekee käytännössä p=p+4 */
/* 7 */ *p = p-3; /* Käytännössä p-6 */
/* 8 */ **p = 199;
/* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 */ /* 7 */ /* 8 */
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
100 | | a | | | | | | | | | | | | | |
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
102 | ?? | b | | | | | | | | | | | | | |
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
104 | ?? | c | | | | | | | | | | | | | |
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
106 | ?? | p | | | | | | | | | | | | | |
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
108 | ?? | e | | | | | | | | | | | | | |
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
Osoitinaritmetiikassa p=p+1 tarkoitetaan että osoitin p siirtyy
seuraavaan "olioon". Siksi käytännössä 16-bittisessä koneessa
muistipaikan arvo kasvaakin kahdella.
#include <stdio.h> /* 01 */ /* 02 */ int *d,c=4,u=9; /* 03 */ /* 04 */ int huijaus(int a,int *b) /* 05 */ { /* 06 */ *(d+1) = ++(*b); /* 07 */ c = *b - 2; /* 08 */ *b += a/2; /* 09 */ return a > 3; /* 10 */ } /* 11 */ /* 12 */ int puijaus(int **b) /* 13 */ { /* 14 */ int n; /* 15 */ *b = &u; /* 16 */ *d =175; /* 17 */ n = --u; /* 18 */ return 3 * (*b == d) + n; /* 19 */ } /* 20 */ /* 21 */ int main(void) /* 22 */ { /* 23 */ int k1 = 31, k2 = 45; d = &c-1; /* 24 */ k1 = huijaus(k2+*(d+1),&c); /* 25 */ k2 = puijaus(&d); /* 26 */ printf("%4d ",*d); /* 27 */ printf("%4d %4d %4d %4d\n",u,c,k2,k1); /* 28 */ return 0; /* 29 */ }
i = pienimman_paikka(k_pituudet,12); /* => i=1 */
n = pienin(k_pituudet,12); /* => n = 28 */
char s[]="Kissa istuu"; tuhoa_lopusta(s,3); /* => s = "Kissa is" */ string st("Kissa istuu"); tuhoa_lopusta(st,3); // => st= "Kissa is"
int poista(int taulukko[],int lkm,int n)
int t[]={4,7,6,3,6,2}; int lkm=6; lkm = poista(t,lkm,6); /* => t = {4,7,3,2}, lkm = 4 */