Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori...

68
Esercitazioni di Informatica (CIV) Puntatori Andrea Romanoni e-mail: [email protected] website: http://home.deib.polimi.it/romanoni/ 19 novembre 2015

Transcript of Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori...

Page 1: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercitazioni di Informatica (CIV)Puntatori

Andrea Romanoni

e-mail: [email protected]: http://home.deib.polimi.it/romanoni/

19 novembre 2015

Page 2: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 3: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;

Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULL

NULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 4: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;

PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULL

NULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 5: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;

putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULL

NULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 6: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;

putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 7: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero);

/* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 8: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1);

/* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 9: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;

putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 10: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;

putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 11: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero);

/* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 12: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;

*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 13: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;

*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 14: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;

putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 15: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;

putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 16: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero);

/* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 17: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizi sui puntatoriUso elementare dei puntatori

#include <stdio.h>#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero, ArrInt[5];char ArrChar[16];int *PuntInt1, *PuntInt2;char *PuntChar;

PuntInt1 = NULL;Intero = 7;PuntInt1 = &Intero;putint(Intero); /* stampa "7" */putint(*PuntInt1); /* stampa ancora "7" */*PuntInt1 = 2;putint(Intero); /* stampa "2" */PuntInt2 = PuntInt1;*PuntInt2 = 4;putint(Intero); /* stampa "4" */PuntChar = &Intero;

}

NULLNULL7

&Intero7

&Intero2

&Intero2

PuntInt1

&Intero2

&Intero

&Intero4

&Intero

&Intero4

&Intero&Intero

Intero:PuntInt1:

PuntInt2:PuntChar:

Andrea Romanoni Esercitazioni di Informatica (CIV) 2 / 14

Page 18: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 19: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 20: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 21: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;

putint(ArrInt[0]);/* stampa "11" */

*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 22: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 23: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 24: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 25: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 26: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 27: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 28: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 29: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];

putint(*PuntInt2); /* stampa unvalore imprevedibile, */

ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 30: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2);

/* stampa unvalore imprevedibile, */

ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 31: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray e puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int ArrInt[5];int *PuntInt1, *PuntInt2;

PuntInt1 = ArrInt;

ArrInt[0] = 11;putint(ArrInt[0]);

/* stampa "11" */*ArrInt = 22;putint(ArrInt[0]);

/* stampa "22" */*(ArrInt + 2) = 33;putint(ArrInt[2]);

/* stampa "33" */

PuntInt1 = &ArrInt[2];putint(*PuntInt1);

/* stampa ancora "33" */

PuntInt2 = &ArrInt[10];putint(*PuntInt2); /* stampa un

valore imprevedibile, */ArrInt[25] = 1000;return 0;

}

Ricordate:ArrInt =&ArrInt[0]

&ArrInt[0]

11

&ArrInt[0]

22

&ArrInt[0]

22

33

&ArrInt[0]

22

33

&ArrInt[2]

22

33

&ArrInt[2]&ArrInt[10]

ArrInt[0]:ArrInt[1]:ArrInt[2]:ArrInt[3]:ArrInt[4]:

PuntInt1:PuntInt2:

Andrea Romanoni Esercitazioni di Informatica (CIV) 3 / 14

Page 32: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;putstring(ArrChar);

/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];putstring(PuntChar);

/* stampa "4567"*/

PuntChar = ArrChar + 3;putstring(PuntChar);

/* stampa "4567" */

++PuntChar;putstring(PuntChar);

/* stampa "567" */

putstring(*(ArrChar + 6));/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 33: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;putstring(ArrChar);

/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];putstring(PuntChar);

/* stampa "4567"*/

PuntChar = ArrChar + 3;putstring(PuntChar);

/* stampa "4567" */

++PuntChar;putstring(PuntChar);

/* stampa "567" */

putstring(*(ArrChar + 6));/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 34: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;putstring(ArrChar);

/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];putstring(PuntChar);

/* stampa "4567"*/

PuntChar = ArrChar + 3;putstring(PuntChar);

/* stampa "4567" */

++PuntChar;putstring(PuntChar);

/* stampa "567" */

putstring(*(ArrChar + 6));/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 35: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;

putstring(ArrChar);/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];putstring(PuntChar);

/* stampa "4567"*/

PuntChar = ArrChar + 3;putstring(PuntChar);

/* stampa "4567" */

++PuntChar;putstring(PuntChar);

/* stampa "567" */

putstring(*(ArrChar + 6));/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 36: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;putstring(ArrChar);

/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];putstring(PuntChar);

/* stampa "4567"*/

PuntChar = ArrChar + 3;putstring(PuntChar);

/* stampa "4567" */

++PuntChar;putstring(PuntChar);

/* stampa "567" */

putstring(*(ArrChar + 6));/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 37: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;putstring(ArrChar);

/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];

putstring(PuntChar);/* stampa "4567"*/

PuntChar = ArrChar + 3;putstring(PuntChar);

/* stampa "4567" */

++PuntChar;putstring(PuntChar);

/* stampa "567" */

putstring(*(ArrChar + 6));/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 38: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;putstring(ArrChar);

/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];putstring(PuntChar);

/* stampa "4567"*/

PuntChar = ArrChar + 3;putstring(PuntChar);

/* stampa "4567" */

++PuntChar;putstring(PuntChar);

/* stampa "567" */

putstring(*(ArrChar + 6));/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 39: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;putstring(ArrChar);

/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];putstring(PuntChar);

/* stampa "4567"*/

PuntChar = ArrChar + 3;

putstring(PuntChar);/* stampa "4567" */

++PuntChar;putstring(PuntChar);

/* stampa "567" */

putstring(*(ArrChar + 6));/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 40: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;putstring(ArrChar);

/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];putstring(PuntChar);

/* stampa "4567"*/

PuntChar = ArrChar + 3;putstring(PuntChar);

/* stampa "4567" */

++PuntChar;putstring(PuntChar);

/* stampa "567" */

putstring(*(ArrChar + 6));/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 41: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;putstring(ArrChar);

/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];putstring(PuntChar);

/* stampa "4567"*/

PuntChar = ArrChar + 3;putstring(PuntChar);

/* stampa "4567" */

++PuntChar;

putstring(PuntChar);/* stampa "567" */

putstring(*(ArrChar + 6));/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 42: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;putstring(ArrChar);

/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];putstring(PuntChar);

/* stampa "4567"*/

PuntChar = ArrChar + 3;putstring(PuntChar);

/* stampa "4567" */

++PuntChar;putstring(PuntChar);

/* stampa "567" */

putstring(*(ArrChar + 6));

/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 43: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriArray di caratteri e stringhe

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){char ArrChar[10];char* PuntChar;

strcpy(ArrChar, "123456789");

ArrChar[7] = ’\0’;putstring(ArrChar);

/* stampa solo "1234567"*/

PuntChar = &ArrChar[3];putstring(PuntChar);

/* stampa "4567"*/

PuntChar = ArrChar + 3;putstring(PuntChar);

/* stampa "4567" */

++PuntChar;putstring(PuntChar);

/* stampa "567" */

putstring(*(ArrChar + 6));/* stampa "7" */

return 0;}

Ricordate:ArrChar =&ArrChar[0]

123456789

’\0’

1234567

’\0’9

’\0’

1234567

’\0’9

’\0’&ArrChar[3]

1234567

’\0’9

’\0’ArrChar+3

1234567

’\0’9

’\0’ArrChar+4

ArrChar[0]:ArrChar[1]:ArrChar[2]:ArrChar[3]:ArrChar[4]:ArrChar[5]:ArrChar[6]:ArrChar[7]:ArrChar[8]:ArrChar[9]:

PuntChar:Andrea Romanoni Esercitazioni di Informatica (CIV) 4 / 14

Page 44: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori a puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero;int *PuntInt1;int** PuntPuntInt;int*** PuntPuntPuntInt;

PuntInt1 = &Intero;PuntPuntInt = &PuntInt1;*(*PuntPuntInt) = 100;PuntPuntPuntInt = &PuntPuntInt;putint(*(*(*PuntPuntPuntInt)));putint(***PuntPuntPuntInt); /* stampa "100" */

return 0;}

&Intero&Intero&Intero&PuntInt1

100&Intero

&PuntInt1

100&Intero

&PuntInt1&PuntPuntInt

Intero:PuntInt1:

PuntPuntInt:PuntPuntPuntInt:

Andrea Romanoni Esercitazioni di Informatica (CIV) 5 / 14

Page 45: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori a puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero;int *PuntInt1;int** PuntPuntInt;int*** PuntPuntPuntInt;

PuntInt1 = &Intero;

PuntPuntInt = &PuntInt1;*(*PuntPuntInt) = 100;PuntPuntPuntInt = &PuntPuntInt;putint(*(*(*PuntPuntPuntInt)));putint(***PuntPuntPuntInt); /* stampa "100" */

return 0;}

&Intero

&Intero&Intero&PuntInt1

100&Intero

&PuntInt1

100&Intero

&PuntInt1&PuntPuntInt

Intero:PuntInt1:

PuntPuntInt:PuntPuntPuntInt:

Andrea Romanoni Esercitazioni di Informatica (CIV) 5 / 14

Page 46: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori a puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero;int *PuntInt1;int** PuntPuntInt;int*** PuntPuntPuntInt;

PuntInt1 = &Intero;PuntPuntInt = &PuntInt1;

*(*PuntPuntInt) = 100;PuntPuntPuntInt = &PuntPuntInt;putint(*(*(*PuntPuntPuntInt)));putint(***PuntPuntPuntInt); /* stampa "100" */

return 0;}

&Intero

&Intero

&Intero&PuntInt1

100&Intero

&PuntInt1

100&Intero

&PuntInt1&PuntPuntInt

Intero:PuntInt1:

PuntPuntInt:PuntPuntPuntInt:

Andrea Romanoni Esercitazioni di Informatica (CIV) 5 / 14

Page 47: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori a puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero;int *PuntInt1;int** PuntPuntInt;int*** PuntPuntPuntInt;

PuntInt1 = &Intero;PuntPuntInt = &PuntInt1;

*(*PuntPuntInt) = 100;PuntPuntPuntInt = &PuntPuntInt;putint(*(*(*PuntPuntPuntInt)));putint(***PuntPuntPuntInt); /* stampa "100" */

return 0;}

&Intero&Intero

&Intero&PuntInt1

100&Intero

&PuntInt1

100&Intero

&PuntInt1&PuntPuntInt

Intero:PuntInt1:

PuntPuntInt:PuntPuntPuntInt:

Andrea Romanoni Esercitazioni di Informatica (CIV) 5 / 14

Page 48: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori a puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero;int *PuntInt1;int** PuntPuntInt;int*** PuntPuntPuntInt;

PuntInt1 = &Intero;PuntPuntInt = &PuntInt1;*(*PuntPuntInt) = 100;

PuntPuntPuntInt = &PuntPuntInt;putint(*(*(*PuntPuntPuntInt)));putint(***PuntPuntPuntInt); /* stampa "100" */

return 0;}

&Intero&Intero

&Intero&PuntInt1

100&Intero

&PuntInt1

100&Intero

&PuntInt1&PuntPuntInt

Intero:PuntInt1:

PuntPuntInt:PuntPuntPuntInt:

Andrea Romanoni Esercitazioni di Informatica (CIV) 5 / 14

Page 49: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori a puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero;int *PuntInt1;int** PuntPuntInt;int*** PuntPuntPuntInt;

PuntInt1 = &Intero;PuntPuntInt = &PuntInt1;*(*PuntPuntInt) = 100;

PuntPuntPuntInt = &PuntPuntInt;putint(*(*(*PuntPuntPuntInt)));putint(***PuntPuntPuntInt); /* stampa "100" */

return 0;}

&Intero&Intero&Intero&PuntInt1

100&Intero

&PuntInt1

100&Intero

&PuntInt1&PuntPuntInt

Intero:PuntInt1:

PuntPuntInt:PuntPuntPuntInt:

Andrea Romanoni Esercitazioni di Informatica (CIV) 5 / 14

Page 50: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori a puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero;int *PuntInt1;int** PuntPuntInt;int*** PuntPuntPuntInt;

PuntInt1 = &Intero;PuntPuntInt = &PuntInt1;*(*PuntPuntInt) = 100;PuntPuntPuntInt = &PuntPuntInt;putint(*(*(*PuntPuntPuntInt)));putint(***PuntPuntPuntInt);

/* stampa "100" */

return 0;}

&Intero&Intero&Intero&PuntInt1

100&Intero

&PuntInt1

100&Intero

&PuntInt1&PuntPuntInt

Intero:PuntInt1:

PuntPuntInt:PuntPuntPuntInt:

Andrea Romanoni Esercitazioni di Informatica (CIV) 5 / 14

Page 51: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori a puntatori

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int Intero;int *PuntInt1;int** PuntPuntInt;int*** PuntPuntPuntInt;

PuntInt1 = &Intero;PuntPuntInt = &PuntInt1;*(*PuntPuntInt) = 100;PuntPuntPuntInt = &PuntPuntInt;putint(*(*(*PuntPuntPuntInt)));putint(***PuntPuntPuntInt); /* stampa "100" */

return 0;}

&Intero&Intero&Intero&PuntInt1

100&Intero

&PuntInt1

100&Intero

&PuntInt1&PuntPuntInt

Intero:PuntInt1:

PuntPuntInt:PuntPuntPuntInt:

Andrea Romanoni Esercitazioni di Informatica (CIV) 5 / 14

Page 52: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori e strutture

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int *PuntInt1;char* PuntChar;

typedef struct {char CampoChar;int CampoInt;

} TipoStruttura;

TipoStruttura S;TipoStruttura *PuntStruttura;

PuntStruttura = &S;PuntInt1 = &(S.CampoInt);PuntChar = &S.CampoChar;*PuntInt1 = 111;*PuntChar = ’z’;putint((*PuntStruttura).CampoInt);

/* stampa "111" */

putint(PuntStruttura->CampoChar);

/* stampa "z" */

return 0;}

&(S.CampoInt)&S.CampoChar

&S

&(S.CampoInt)&S.CampoChar

111&S

&(S.CampoInt)&S.CampoChar

’z’111&S

PuntInt1:PuntChar:

S.CampoChar:S.CampoInt:

PuntStruttura:

Andrea Romanoni Esercitazioni di Informatica (CIV) 6 / 14

Page 53: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori e strutture

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int *PuntInt1;char* PuntChar;

typedef struct {char CampoChar;int CampoInt;

} TipoStruttura;

TipoStruttura S;TipoStruttura *PuntStruttura;

PuntStruttura = &S;PuntInt1 = &(S.CampoInt);PuntChar = &S.CampoChar;

*PuntInt1 = 111;*PuntChar = ’z’;putint((*PuntStruttura).CampoInt);

/* stampa "111" */

putint(PuntStruttura->CampoChar);

/* stampa "z" */

return 0;}

&(S.CampoInt)&S.CampoChar

&S

&(S.CampoInt)&S.CampoChar

111&S

&(S.CampoInt)&S.CampoChar

’z’111&S

PuntInt1:PuntChar:

S.CampoChar:S.CampoInt:

PuntStruttura:

Andrea Romanoni Esercitazioni di Informatica (CIV) 6 / 14

Page 54: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori e strutture

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int *PuntInt1;char* PuntChar;

typedef struct {char CampoChar;int CampoInt;

} TipoStruttura;

TipoStruttura S;TipoStruttura *PuntStruttura;

PuntStruttura = &S;PuntInt1 = &(S.CampoInt);PuntChar = &S.CampoChar;

*PuntInt1 = 111;*PuntChar = ’z’;putint((*PuntStruttura).CampoInt);

/* stampa "111" */

putint(PuntStruttura->CampoChar);

/* stampa "z" */

return 0;}

&(S.CampoInt)&S.CampoChar

&S

&(S.CampoInt)&S.CampoChar

111&S

&(S.CampoInt)&S.CampoChar

’z’111&S

PuntInt1:PuntChar:

S.CampoChar:S.CampoInt:

PuntStruttura:

Andrea Romanoni Esercitazioni di Informatica (CIV) 6 / 14

Page 55: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori e strutture

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int *PuntInt1;char* PuntChar;

typedef struct {char CampoChar;int CampoInt;

} TipoStruttura;

TipoStruttura S;TipoStruttura *PuntStruttura;

PuntStruttura = &S;PuntInt1 = &(S.CampoInt);PuntChar = &S.CampoChar;*PuntInt1 = 111;

*PuntChar = ’z’;putint((*PuntStruttura).CampoInt);

/* stampa "111" */

putint(PuntStruttura->CampoChar);

/* stampa "z" */

return 0;}

&(S.CampoInt)&S.CampoChar

&S

&(S.CampoInt)&S.CampoChar

111&S

&(S.CampoInt)&S.CampoChar

’z’111&S

PuntInt1:PuntChar:

S.CampoChar:S.CampoInt:

PuntStruttura:

Andrea Romanoni Esercitazioni di Informatica (CIV) 6 / 14

Page 56: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori e strutture

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int *PuntInt1;char* PuntChar;

typedef struct {char CampoChar;int CampoInt;

} TipoStruttura;

TipoStruttura S;TipoStruttura *PuntStruttura;

PuntStruttura = &S;PuntInt1 = &(S.CampoInt);PuntChar = &S.CampoChar;*PuntInt1 = 111;

*PuntChar = ’z’;putint((*PuntStruttura).CampoInt);

/* stampa "111" */

putint(PuntStruttura->CampoChar);

/* stampa "z" */

return 0;}

&(S.CampoInt)&S.CampoChar

&S

&(S.CampoInt)&S.CampoChar

111&S

&(S.CampoInt)&S.CampoChar

’z’111&S

PuntInt1:PuntChar:

S.CampoChar:S.CampoInt:

PuntStruttura:

Andrea Romanoni Esercitazioni di Informatica (CIV) 6 / 14

Page 57: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori e strutture

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int *PuntInt1;char* PuntChar;

typedef struct {char CampoChar;int CampoInt;

} TipoStruttura;

TipoStruttura S;TipoStruttura *PuntStruttura;

PuntStruttura = &S;PuntInt1 = &(S.CampoInt);PuntChar = &S.CampoChar;*PuntInt1 = 111;*PuntChar = ’z’;

putint((*PuntStruttura).CampoInt);/* stampa "111" */

putint(PuntStruttura->CampoChar);

/* stampa "z" */

return 0;}

&(S.CampoInt)&S.CampoChar

&S

&(S.CampoInt)&S.CampoChar

111&S

&(S.CampoInt)&S.CampoChar

’z’111&S

PuntInt1:PuntChar:

S.CampoChar:S.CampoInt:

PuntStruttura:

Andrea Romanoni Esercitazioni di Informatica (CIV) 6 / 14

Page 58: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori e strutture

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int *PuntInt1;char* PuntChar;

typedef struct {char CampoChar;int CampoInt;

} TipoStruttura;

TipoStruttura S;TipoStruttura *PuntStruttura;

PuntStruttura = &S;PuntInt1 = &(S.CampoInt);PuntChar = &S.CampoChar;*PuntInt1 = 111;*PuntChar = ’z’;

putint((*PuntStruttura).CampoInt);/* stampa "111" */

putint(PuntStruttura->CampoChar);

/* stampa "z" */

return 0;}

&(S.CampoInt)&S.CampoChar

&S

&(S.CampoInt)&S.CampoChar

111&S

&(S.CampoInt)&S.CampoChar

’z’111&S

PuntInt1:PuntChar:

S.CampoChar:S.CampoInt:

PuntStruttura:

Andrea Romanoni Esercitazioni di Informatica (CIV) 6 / 14

Page 59: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori e strutture

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int *PuntInt1;char* PuntChar;

typedef struct {char CampoChar;int CampoInt;

} TipoStruttura;

TipoStruttura S;TipoStruttura *PuntStruttura;

PuntStruttura = &S;PuntInt1 = &(S.CampoInt);PuntChar = &S.CampoChar;*PuntInt1 = 111;*PuntChar = ’z’;putint((*PuntStruttura).CampoInt);

/* stampa "111" */

putint(PuntStruttura->CampoChar);

/* stampa "z" */

return 0;}

&(S.CampoInt)&S.CampoChar

&S

&(S.CampoInt)&S.CampoChar

111&S

&(S.CampoInt)&S.CampoChar

’z’111&S

PuntInt1:PuntChar:

S.CampoChar:S.CampoInt:

PuntStruttura:

Andrea Romanoni Esercitazioni di Informatica (CIV) 6 / 14

Page 60: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio sui puntatoriPuntatori e strutture

#include "libreria.h"#include <string.h>

int main(int argc, char *argv[]){{

int *PuntInt1;char* PuntChar;

typedef struct {char CampoChar;int CampoInt;

} TipoStruttura;

TipoStruttura S;TipoStruttura *PuntStruttura;

PuntStruttura = &S;PuntInt1 = &(S.CampoInt);PuntChar = &S.CampoChar;*PuntInt1 = 111;*PuntChar = ’z’;putint((*PuntStruttura).CampoInt);

/* stampa "111" */putint(PuntStruttura->CampoChar);

/* stampa "z" */return 0;

}

&(S.CampoInt)&S.CampoChar

&S

&(S.CampoInt)&S.CampoChar

111&S

&(S.CampoInt)&S.CampoChar

’z’111&S

PuntInt1:PuntChar:

S.CampoChar:S.CampoInt:

PuntStruttura:

Andrea Romanoni Esercitazioni di Informatica (CIV) 6 / 14

Page 61: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esercizio 1Palindroma?

Chiedete all’utente l’immissione di immettere una parola e controllate chesia palindroma per mezzo di una funzione.

Andrea Romanoni Esercitazioni di Informatica (CIV) 7 / 14

Page 62: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esempi di utilizzo di strutture e puntatori

Create un tipo di dato CD. Un CD ha un nome di al massimo 50 caratteri,e una durata in secondiCreate un tipo di dato archivio. Un archivio è una lista sequenziale di almassimo 100 CD

Create una funzione per popolare l’archivio con due CD1 nome: primoCd; durata: 36002 nome: secondoCd; durata: 4600

Create una funzione che stampi un archivioRichiamate le due funzioni dal main

Andrea Romanoni Esercitazioni di Informatica (CIV) 8 / 14

Page 63: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esame del 21 luglio 2014Testo

Si implementi un sistema per la gestione della classifica del rankingmondiale dei giocatori di scacchi.

Un giocatore è modellato daI un array di caratteri contenente il suo nome e cognome (massimo 50

caratteri)I i suoi anni di inizio e fine attività, rappresentati da interi. L’ anno di

fine attività è impostato a -1 nel caso il giocatore sia ancora attivoI il suo rating ELO (un intero senza segno)

Una classifica è un vettore di puntatori a giocatore di 30elementi.Una torneo è rappresentato come una lista sequenziale, contenenteal più 60 puntatori ai giocatori partecipanti e una lista sequenziale dialtrettanti interi rappresentanti la posizione ottenuta dal giocatoreal torneo.Un archivio è costituito da una lista sequenziale di al più 1000giocatori, che si assume contenerne almeno 100.

Andrea Romanoni Esercitazioni di Informatica (CIV) 9 / 14

Page 64: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esame del 21 luglio 2014Definizione dei tipi di dato – Punti 1

Definire i tipi di dato definire i tipi di dato giocatore, archivio,classifica, torneo.

Andrea Romanoni Esercitazioni di Informatica (CIV) 10 / 14

Page 65: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esame del 21 luglio 2014Definiamo i tipi

#define MAX_CHAR 50#define NUM_GIOCATORI 30#define MAX_GIOCATORI_TORNEO 60#define MAX_GIOCATORI 1000

typedef struct {char nome[MAX_CHAR];char cognome[MAX_CHAR];int anni_attivita;unsigned int rating;

} giocatore;

typedef giocatore*classifica[NUM_GIOCATORI];

typedef struct {giocatore* g[MAX_GIOCATORI_TORNEO];int n;

}lista_giocatori;

typedef struct {int pos[MAX_GIOCATORI_TORNEO];int n;

}lista_posizioni;

typedef struct {lista_giocatori lg;lista_posizioni lp;

}torneo;

typedef struct {giocatori g[MAX_GIOCATORI];int n;

}archivio;

Andrea Romanoni Esercitazioni di Informatica (CIV) 11 / 14

Page 66: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esame del 21 luglio 2014Definizione di prototipi di funzione – Punti 2

Si esplicitino le dichiarazioni dei soli prototipi delle seguenti funzioni:

aggiorna_archivio: riceve l’ archivio dei giocatori e un torneo,aggiorna il rating ELO dei giocatori presenti al torneo in base allaposizione ottenuta.ottieni_migliori: riceve l’ archivio dei giocatori e unaclassifica, aggiorna la classifica in modo che punti ai migliori30 giocatori dell’ archivio.stelle_nascenti: riceve una classifica e stampa a video i 5migliori giocatori in attività da meno di 2 anni.

Andrea Romanoni Esercitazioni di Informatica (CIV) 12 / 14

Page 67: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esame del 21 luglio 2014Definizione di prototipi di funzione – Punti 2

void aggiorna_archivio(archivio *a, torneo t)

void ottieni_migliori(archivio a, classifica *c)

void stelle_nascenti(classifica c)

Andrea Romanoni Esercitazioni di Informatica (CIV) 13 / 14

Page 68: Esercitazioni di Informatica (CIV) - Puntatori · Esercitazioni di Informatica (CIV) Puntatori AndreaRomanoni e-mail: andrea.romanoni@polimi.it website:  19novembre2015

Esame del 21 luglio 2014Implementazione – 16 Punti

Esercizi di implementazione:Si implementi la funzione aggiorna_archivio. Per ogni giocatore presente altorneo, ovvero quelli puntati dai puntatori del torneo, il nuovo ELO rating ècalcolato come ELOprecedente + 10× (posizione − b numero partecipanti

2 c). Nel caso unaggiornamento del rating ELO lo porti ad essere negativo, esso è posto a 0. (3Punti)Si implementi la funzione ottieni_migliori.Si implementi la funzione stelle_nascenti che riceve una classifica e stampaa video i 5 migliori giocatori in attività da meno di 2 anni. (8 Punti) Nel caso igiocatori con meno di due anni di attività siano meno di 5, stampa solamentequelli presenti. (5 Punti)

Andrea Romanoni Esercitazioni di Informatica (CIV) 14 / 14