P - Dato Puntatore Flashcards

1
Q

Cosa cambia tra Big e Little Endian?

A
  • Big: MSB all’indirizzo di memoria più basso

- Little: LSB all’indirizzo di memoria più alto

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Che differenza c’è tra un puntatore e un identificatore? Quindi quali “operazioni” supporta un dato puntatore e quali operatori?

A

Un identificatore è fisso mentre un puntatore È UN DATO e cioè è modificabile, calcolabile, assegnabile proprio perché è un dato. Gli operatori sono quelli di riferimento & e di dereferenziazione *

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

int n, *p;
n = 41; p = &n;

Quali sono le istruzioni per stampare il valore di n (2 modi), acquisire un valore in n (2 modi), stampare il valore del puntatore (e cioè?).

A
  • printf(“%d”, n); e printf(“%d”, *p);
  • scanf(“%d”, &n); e scanf(“%d”, p);
  • printf(“%p”, p); -> indirizzo
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

In che libreria si trova NULL?

A

stdio.h

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Che differenza c’è tra un puntatore come dato e come riferimento?

A

Un puntatore è usato come dato quando si vuole dare proprio al puntatore un valore, per esempio: p = &x;
Un puntatore è usato come riferimento quando attraverso di lui si vuole manipolare un altro dato, per esempio: p = 3(x+2);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Cosa si può dire degli incrementi p = p+i e p++ dove p è un puntatore?

A

L’incremento consiste in isizeof(p) ovvero non bisogna vedere i e 1 come numeri ma come quantità di dati del tipo di dato puntato, ovvero numero di dati da saltare.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Cosa sono il passaggio attuale e formale dei parametri?

A

Il parametro formale è quello che si trova nella definizione della funzione; quello attuale è quello che viene calcolato alla chiamata della funzione e poi effettivamente passato.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Quale tipo di passaggio supporta il linguaggio C? Descriverlo. Descrivere anche l’altro tipo realizzabile.

A

Supporta solo il passaggio by value nel quale il parametro attuale viene copiato nel formale.
Inoltre si può realizzare il passaggio by pointer: consiste in un passaggio by value di un puntatore.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

A cosa corrisponde il nome del vettore?

A

Il nome del vettore è il puntatore al primo elemento del vettore stesso.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Mettere in corrispondenza biunivoca le seguenti notazioni:

  • vet
  • vet[i]
  • *vet
  • vet[0]
  • *(vet + i)
  • &vet[0]
A
  • vet -> &vet[0]
  • vet[I] -> *(vet + i)
  • *vet -> vet[0]
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Se dati + un vettore di interi, si può fare dati++ per passare all’elemento successivo? E dati + i?

A

La prima no perché dati è un nome e non è modificabile, la seconda sì.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Acquisizione da tastiera degli elementi del vettore dati[100].
Scrivere i tre modi: classico, con puntatore ma incrementando l’indice, con puntatore incrementando il puntatore.

A

1)
int dati[100], i;

for(i = 0; i < 100; i++) scanf(“%d”, &dati[i]);

2)
int dati[100], i, *p;
p = &dati[0]
...
for(i = 0; i < 100; i++) scanf("%d", p+i); (oppure dati + i)
3)
int dati[100], i, *p;
p = &dati[0]
...
for(i = 0; i < 100; p++, i++) scanf("%d", p);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Con la tecnica row-major per la scomposizione di matrici (NRxNC), a cosa corrisponde l’elemento mat[i][j]?

A

= (mat + NCI + j)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

In cosa cambia l’utilizzo delle matrici come vettori di righe o come vettore di puntatori a riga?

A

Nulla, si usa sempre la notazione matriciale!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Qual è la dimensione di un puntatore?

A

32 o 64 bit

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

typedef struct {int X,Y;}; punto_t;

int main(){
punto_t A;
}

Scrivere le funzioni puntoScan per A e anche la chiamata.

A

puntoScan(stdin, &A);

void puntoScan(FILE *fp, punto_p *p){
// printf per X e Y
scanf("%d%d", &p->X, &p->Y);
}
17
Q

typedef struct {int X,Y;}; punto_t;

int main(){
punto_t *pA;
}

Scrivere le funzioni puntoCrea e puntoScan per pA e anche la chiamata.

A

pA = puntoCrea();

punto_t *puntoCrea(void){
punto_t *p;
p = (punto_t *)malloc(sizeof(punto_t));
return p;
}

puntoScan(stdin, pA);

void puntoScan(FILE *fp, punto_t *p){
// printf per X e Y
scanf("%d%d", &p->X, &p->Y);
}