[C con Clase] Punteros...

Alejandro Vilar López alepelexo en yahoo.es
Mie Feb 28 18:30:37 CET 2007


Bueno, creo que ya voy empezando a entender algo. De todas maneras, hay cosas que me gustaría que me explicarais sobre este tema. Supuestamente, si yo tengo "int *p" y hago "cout << p" me muestra la dirección de memoria y "cout << *p" me muestra el contenido de esa dirección de memoria. Suponiendo que esto sea correcto:

¿En estas sentencias transformáis una variable char en un puntero a int y en un puntero genérico respectivamente?

char cadena[10] = "Hola";
char *c;
int *n;
void *v;

c = cadena; // c apunta a cadena
n = (int *)cadena; // n también apunta a cadena
v = (void *)cadena; // v también

¿Y en esta otra transformáis un puntero genérico en un puntero a float?

cout << "float: " << *(float *)v << endl;


En el curso ponéis el siguiente ejemplo:

#include <iostream>
using namespace std;
struct stEstructura {
int a, b;
} estructura, *e;
int main() {
estructura.a = 10;
estructura.b = 32;
e = &estructura;
cout << "variable" << endl;
cout << e->a << endl;
cout << e->b << endl;
cout << "puntero" << endl;
cout << estructura.a << endl;
cout << estructura.b << endl;
cin.get();
return 0;
}

En el "cout << e->a;" mostráis el contenido de la variable "estructura.a" si no me equivoco. Sin embargo no utilizáis el operador "*" cuando con variables había que usarlo. Dicho esto, ¿cómo podemos mostrar la dirección de memoria de "estructura.a"?

Por último:

#include <iostream>
using namespace std;
int main() {
char cadena1[] = "Cadena 1";
char *cadena2 = "Cadena 2";
cout << cadena1 << endl;
cout << cadena2 << endl;
//cadena1++; // Ilegal, cadena1 es constante
cadena2++; // Legal, cadena2 es un puntero
cout << cadena1 << endl;
cout << cadena2 << endl;
cout << cadena1[1] << endl;
cout << cadena2[0] << endl;
cout << cadena1 + 2 << endl;
cout << cadena2 + 1 << endl;
cout << *(cadena1 + 2) << endl;
cout << *(cadena2 + 1) << endl;
cin.get();
return 0;
}

Me podéis explicar qué hacéis en las siguientes sentencias.

cout << cadena1 + 2 << endl;
cout << cadena2 + 1 << endl;
cout << *(cadena1 + 2) << endl;
cout << *(cadena2 + 1) << endl;


Bueno, un saludo y a ver si soy capaz de entender este capítulo. Más vale que sea importante, porque es dificilísimo.

Un saludo, Alejandro.


		
______________________________________________ 
LLama Gratis a cualquier PC del Mundo. 
Llamadas a fijos y móviles desde 1 céntimo por minuto. 
http://es.voice.yahoo.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070228/7b608767/attachment.html>


Más información sobre la lista de distribución Cconclase