Cuando trabajamos en C/C++ usamos punteros debido a que son una herramienta muy buena para facilitarnos la vida, pero un detalle interesante de estos que no siempre funcionan como uno quiere.
Como sabemos los punteros son direcciones de memoria y utilizar estos puede ocasionar que la aplicación colapse por acceso de memoria no autorizado, pero los utilizamos porque reducen el código y nos ayudan muchísimo.
Aquí un ejemplo de punteros que nos dan problemas cuando iniciamos y no sabemos por que. Para sorpresa del profesor se encuentra raro cuando nos revelamos a utilizar C y optamos por un lenguaje de alto nivel.
#include <stdio.h>
int *a, *b, *c;
void f(int x) {
int i[3];
i[0] = x;
i[1] = x + 1;
i[2] = x + 2;
a = i;
}
void g(int x) {
int i[3];
i[0] = x;
i[1] = x + 1;
i[2] = x + 2;
b = i;
}
void h(int x) {
int i[3];
i[0] = x;
i[1] = x + 1;
i[2] = x + 2;
c = i;
}
int main() {
f(1);
printf("a = {%d,%d,%d}\n", a[0], a[1], a[2]);
g(2);
printf("a = {%d,%d,%d}\n", a[0], a[1], a[2]);
h(3);
printf("a = {%d,%d,%d}\n", a[0], a[1], a[2]);
}
Noten que imprimo siempre a[0], a[1] y a[2] siempre, pero después de llamar a una de mis funciones para asignar valores a otro puntero.
No hay comentarios.:
Publicar un comentario