Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
char *
Dir 0xff04
H
0
L
A
\0
char *
Dir 0xff08
C
U
R
S
O
\0
char *v[2];
cout<<Tamao del puntero: <<(int)&v[1]-(int)&v[0]<< bytes<<endl;
6. Si ptrLetra es un puntero a un char, qu hace la instruccin *ptrLetra++=3;? y la
instruccin (*ptrLetra)++=3;? son iguales?
*ptrLetra=3;
*ptrLetra++=3
ptrLetra++;
Esta instruccin le asigna el cdigo ASCII 3 al carcter al que apunta el puntero ptrLetra
y a continuacin avanzan el puntero una posicin a la derecha.
(*ptrLetra)++=3 no compila, es semnticamente incorrecta. En C++ no es posible una
instruccin del tipo x++=3, siendo x una variable.
CONCLUSIN: evitar en la medida de lo posible hacer combinaciones de operadores
cuyo orden de evaluacin sea imprevisible.
// == v[4]
10.
Indica los valores de las siguientes expresiones atendiendo a la disposicin del vector
de enteros lista que se representa en la figura:
lista[2] == 64
*(lista+3) == 33
&lista[1] == 1502
Lista == 1500
lista+2 == 1504
lista+1<&lista[1] == 1502<1502 == false
11. Crea una funcin para intercambiar dos nmeros enteros usando punteros equivalente
al paso mediante referencias de C++ que se indica. Para ello debes sustituir los
parmetros de entrada por punteros a enteros y cambiar el cdigo para adaptarlo a la
lgica de los mismos. Asimismo, indica cmo sera la llamada a la funcin para dos
variables enteras x e y.
int x=3, y=4;
intercambiar(x,y);
void intercambiar(int &a, int &b)
{
int temp=a;
a=b;
b=temp;
}
intercambiar(&x, &y)
void intercambiar(int *ptr_a, int *ptr_b)
{
int temp=*ptr_a;
*ptr_a=*ptr_b;
*ptr_b=temp;
}
12. Puedes averiguar qu hace el siguiente cdigo? Qu contendrn letra1 y letra2 tras
la ejecucin del cdigo?
char letra1 = 'A';
char letra2 = 'B';
char* puntero = &letra1; /* puntero se declara como un puntero de tipo char, por lo
tanto, almacenar la direccin de una variable de ese tipo. De hecho, en la propia
declaracin se le asigna la direccin de memoria de la variable tipo char letra1. En
otras palabras puntero apunta a letra1 */
letra1 = 'C';
letra2 = *puntero; /* como puntero apuntaba a letra1 y en la instruccin anterior
hemos cambiado el valor de letra1 por C, entonces al dereferencia el puntero
mediante el operador * estamos asignndole ese valor C a letra 2 */
Al final del programa letra1==C y letra2==C
14. Contenidos de letra1 y letra2 al final del cdigo? A quin apuntan los punteros al
final?
letra0
(H+1) a letra1
(H+2) a letra2
(H+3) a letra3
17. Representa mediante instrucciones lo que se representa en las figuras del estado de
memoria teniendo en cuenta las siguientes declaraciones de partida que se
corresponden con la primera instantnea. Todas los cambios de valor de las variables y
y z deben realizarse mediante punteros, siempre que se pueda. Si para un mismo
estado se te ocurren varias posibilidades indcalas como otras alternativas:
y = 5;
z = 3;
*nptr;
*mptr;
nptr=&y;
z=*nptr;
*nptr=*nptr+2;
a) mptr=nptr;
b) mptr=&y;
mptr=&z;
a) z=*nptr;
b) *mptr=*nptr;
c) *mptr+=2;
*nptr++;
a) ++*nptr;
b) *nptr=*nptr+1;
c) *nptr+=1;
18. Aqu tienes algunos cdigos que presentan errores. Trata de identificarlos y explica el
motivo del error:
int a = 10;
int *ptri = NULL;
double x = 5.0;
double *ptrf = NULL;
...
ptri = &a; //ptri apunta a la variable entera a
ptrf = &x; //ptrf apunta a la variable double x
ptrf = ptri; // la asignacin de punteros slo es posible
// entre punteros que apunten al mismo tipo base.
char *ptr;
*ptr = a; // ptr est apuntando a un sitio desconocido de
//la memoria porque no lo inicialic. Sera un puntero
//salvaje, sin control
int n;
int *ptr = &n;
ptr = 9; /* estoy asignndole la direccin 9 de memoria al
puntero, algo que no puedo hacer porque no s qu hay en
la direccin 9; ni siquiera s si el sistema operativo me
da acceso a esa direccin. En realidad, lo que se supone
que se quera hacer era *ptr=9, es decir, asignarle 9 a n
a travs del puntero ptr */
a = 5; // a vale 5
*p; int **q;
&a; // p apunta a la variable a
&p; // q apunta a p
*p*2+**q;
5*2+5=15
El valor final de a es 15
20. Se pretende desarrollar tres fragmentos de cdigo que sumen los elementos de un
vector de enteros v de diferentes maneras. Completa dicho cdigo siguiendo las
instrucciones de los comentarios:
int i, suma;