Ohjelmointi 2 / 2011
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 */