Anda di halaman 1dari 6

Prcticas con punteros, vectores y cadenas.

Por Salvador Fernndez

1. Declara una cadena de caracteres de nombre palindromo y asgnale la constante literal AEREA en la misma lnea de declaracin. Hazlo de dos maneras diferentes. 2. 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. 3. Si tienes declarada e inicializada una cadena de caracteres cad, indica dos maneras de leer o acceder al carcter de la primera posicin. 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++? 6. Si ptrLetra es un puntero a un char, qu hace la instruccin *ptrLetra++=3;? y la instruccin (*ptrLetra)++=3;? son iguales? 7. Si quiero incrementar en una unidad el contenido de la variable a la que apunta un puntero p, indica cules de las siguientes instrucciones seran vlidas: *p = *p + 1; *p += 1; ++*p; *p++; 8. Utilizando la notacin de vectores puedes acceder a la quinta posicin (posicin 4, ya que los ndices empiezan en 0) de un vector v mediante la expresin v[4]. Cmo haras referencia a dicha posicin usando notacin y aritmtica de punteros? 9. Dadas las siguiente declaraciones: char *p; char c; Indica de dos maneras diferentes cmo expresar en C++ cada una de las siguientes comprobaciones, donde carcter nulo se refiere a la marca de fin de cadena: Si c es el carcter nulo

Prcticas con punteros, vectores y cadenas. Por Salvador Fernndez

Si p apunta a un carcter nulo Si p es un puntero nulo

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] *(lista+3) &lista[1] lista lista+2 lista+1<&lista[1] 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. void intercambiar(int &a, int &b) { int temp=a; a=b; b=temp; }

Prcticas con punteros, vectores y cadenas. Por Salvador Fernndez

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; letra1 = 'C'; letra2 = *puntero; 13. Teniendo el cdigo.
char letra = 'A'; char* puntero = &letra;

Indicar cules de las siguientes asignaciones son incorrectas y podran producir errores:
letra = *puntero; letra = &letra; letra = &puntero; puntero = *puntero; puntero = *(&puntero); puntero = *letra; *puntero = letra; &puntero = letra;

14. Contenidos de letra1 y letra2 al final del cdigo? A quin apuntan los punteros al final?
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; char letra1 = *(cadena+1); char letra2 = *(cadena+2); char letra3 = *(cadena+3);

Prcticas con punteros, vectores y cadenas. Por Salvador Fernndez b. char* cadena = "Hola"; char letra0 = *cadena; char letra1 = *cadena+1; char letra2 = *cadena+2; char letra3 = *cadena+3;

16. Reescribe el siguiente programa para calcular la media aritmtica de un vector de N valores reales mediante notacin y aritmtica de punteros:
float media (float datos[], int N) { int i; float suma = 0; for (i=0; i<N; i++) suma = suma + datos[i]; return suma/N; }

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, nunca directamente. Si para un mismo estado se te ocurren varias posibilidades indcalas como otras alternativas:
int int int int y = 5; z = 3; *nptr; *mptr;

Prcticas con punteros, vectores y cadenas. Por Salvador Fernndez

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; ptrf = &x; ptrf = ptri;

char *ptr; *ptr = a;

int n; int *ptr = &n; ptr = 9;

int *ptr = NULL; *ptr = 9;

19. Qu valor tendr la variable a tras la ejecucin de este programa?


main () { int int p = q = a = }

a = 5; *p; int **q; &a; &p; *p*2+**q;

Prcticas con punteros, vectores y cadenas. Por Salvador Fernndez

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; int *ptr, *ptrfin; /* Alternativa 1 */ suma = 0; for (i=0 ; i<N ; i++) suma = suma + ____________; //Utilizando notacin de vectores /* Alternativa 2 */ suma = 0; for (i=0 ; i<N ; i++) suma = suma + ____________; //Utilizando notacin de punteros //pero sin echar mano de ptr ni //ptrFin /* Alternativa 3 */ suma = 0; ptrfin = ptr + __________; //Completa la expression para que //ptrFin apunte al ltimo elemento //del vector for (ptr=v ; ____________ ; ptr++) //Completa la condicin suma = suma + *ptr; //del bucle