Beruflich Dokumente
Kultur Dokumente
VICTORIA
1. Suponiendo que tienes dos cadenas de caracteres, cad1 y cad2 tales que
strlen(cad1)==10 y strlen(cad2)==5, indica cmo se declara una tercera cadena cad3
y se le asigna memoria dinmica (en el heap o montn) , teniendo en cuenta que
cad3 va a contener la concatenacin de cad1 y cad2 sin que sobre ninguna posicin
de memoria.
char *cad1=abcdefghij; char *cad2=opqrs;
char *cad3=new char[strlen(cad1)+strlen(cad2)+1];
strcpy(cad3,);
strcat(cad3,cad1);
strcat(cad3,cad2);
delete [] cad3;
3. Si tienes declarada e inicializada una cadena de caracteres cad, indica dos maneras de
leer o acceder al carcter de la primera posicin.
*cad
cad[0]
4. Si en un programa que funciona adecuadamente aparece la sentencia delete s;
podemos adivinar que s es un puntero a
a. Un char, un int, o cualquier otra variable de tipo simple
b. Una cadena de elementos char, int, o de cualquier otro tipo simple
c. Es imposible que s sea un puntero.
5. Cmo puedes averiguar lo que ocupa un puntero a un char en tu computadora y
usando tu compilador de C++?
sizeof (char *)
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++;
Est 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.
if (!c)
if (c==\0)
Si p apunta a un carcter nulo
if (!*p)
if (*p==\0) // no es lo mismo que if (*p==0)
Si p es un puntero nulo
if (p==NULL)
if (!p)
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
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';
14. Contenidos de letra1 y letra2 al final del cdigo? A quin apuntan los punteros al
fina?
char letra1 = 'A';
char letra2 = 'B';
char* puntero1 = &letra1;
char* puntero2 = &letra2;
puntero1 = puntero2;
letra1 = 'C';
letra2 = 'D';
letra1 = *puntero1;
15. Indica los valores que tendrn al final de la ejecucin del siguiente cdigo las variables
letra1, letra2 y letra3 en cada caso.
a.
char* cadena = "Hola";
char letra0 = *cadena; // Asignando H a letra0
char letra1 = *(cadena+1); // Asignando o a letra1
char letra2 = *(cadena+2); // Asignando l a letra2
char letra3 = *(cadena+3); // Asignando a a letra3
b.
char* cadena = "Hola";
char letra0 = *cadena; // Asignando H a
char letra1 = *cadena+1; // Asignando I
char letra2 = *cadena+2; // Asignando J
char letra3 = *cadena+3; // Asignando K
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:
int y = 5; int z = 3; int
*nptr; int *mptr;
nptr=&y;
z=*nptr;
*nptr=*nptr+2;
mptr=&z;
a) z=*nptr;
b) *mptr=*nptr;
c) *mptr+=2;
a) ++*nptr;
b) *nptr=*nptr+1;
c) *nptr+=1;
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
/*
Alternati
va 1 */
suma = 0;
for (i=0 ; i<N ; i++)
suma = suma + v[i]; //Utilizando notacin de
vectores
/*
Alternati
va 2 */
suma = 0;
for (i=0 ; i<N ; i++)
suma = suma + *(v+i) ; //Utilizando notacin de
punteros //pero sin
echar mano de ptr ni
//ptrFin
suma = 0;
ptr=v;
ptrfin = ptr + N; //Completa la expression para que
//ptrFin apunte al ltimo
elemento
//del vector
for (ptr=v ; ptr<ptrfin ; ptr++) //Completa la
condicin
suma = suma + *ptr;
//del bucle