¿Puedes dar un valor a un puntero como * p = 5?

Esto significa que desea desreferenciar el puntero y asignar el valor como 5 en los puntos de puntero de ubicación de memoria.

Es legal solo si el puntero apunta a alguna ubicación de memoria y, por lo tanto, desreferenciarlo para leer el valor existente en la ubicación de memoria o cambiar el valor en la ubicación de memoria está completamente bien. Sin embargo, si el puntero no apunta a ninguna ubicación de memoria, pero también es un puntero incorrecto / puntero no inicializado / puntero nulo, entonces su declaración probablemente se convertirá en segfault.

Ejemplos:

int a = 10;
int * ptr; // ptr todavía no es un puntero válido
ptr = & a; // ptr ahora es un puntero válido.
printf (“% d% d”, * ptr, a); // imprimirá 10 y 10;
* ptr = 5;
printf (“% d% d”, * ptr, a); // imprimirá 5 y 5

int * ptr1;
* ptr1 = 5; // no es una declaración válida y es probable que vea segfault.

ACTUALIZACIÓN: Una cosa que olvidé mencionar es que desreferenciar el puntero y cambiar el valor en la ubicación de la memoria solo se puede hacer si el puntero no es un puntero a una constante.

Entonces, si pa puntero apunta a un valor constante, no puede hacer * p = 5 y cambiar el valor al que apunta p. SOLO es posible si p es un puntero a datos no constantes.

“* p = 5” asigna el valor ‘5’ al CONTENIDO del puntero, no al puntero p.

En los años 80, era común establecer punteros en direcciones específicas, porque los dispositivos específicos vivían en direcciones fijas en algún espacio de direcciones. Pero eso es bastante raro ahora. Tiene que usar las direcciones que le dio el sistema operativo.

Ahora, si hubiera escrito “int * p = 0x00000348”, esto habría creado un puntero p y lo habría establecido en la dirección hexadecimal 348. El ‘int’ hace toda la diferencia. No, la sintaxis no es tan lógica, ¡pero eso es C para ti!

No … en C dará un error de volcado del núcleo. Significa que no ha asignado memoria al puntero. Para asignar memoria al puntero puede hacer-

1. Int x = 5;
Int * p = x;
La segunda línea asigna memoria al puntero de 4 bytes, que finalmente almacena / apunta a un valor 5.

2. Puede usar malloc para asignar memoria dinámicamente y luego asignar el valor al puntero.

Ambos casos funcionarán bien.

En muchos códigos gráficos clásicos de MS-DOS encontrará una línea similar a:

int * vga_mem = 0x8000;

Esto se debe a que, en la PC, el clásico búfer de pantalla a color VGA (no puede llamarlo un framebuffer, ya que según el modo en que se encontraba la pantalla hacía diferentes cosas) vivía en esa dirección.

Entonces sí, puede asignar directamente una dirección a un puntero. En realidad, esto todavía se hace bastante dentro de los núcleos del sistema operativo cuando el sistema operativo está escrito en C.

Uh … Ni siquiera nos dices de qué idioma estás hablando …

Supongamos que es C. La respuesta es todavía, aunque p debería apuntar a un área válida de memoria …

Ese es un código completamente legal, sin embargo, cambió el valor en los puntos de dirección p a no p. Para cambiar eso, necesitarías escribir p = 5. ¿Por qué querrías hacer algo así? Hacer memoria asignada IO a través de p sería una razón.

Claro, pero suponiendo que C no es lo que hará la construcción especificada, más bien lo que señala P tendrá el valor cinco. Si desea asignar un valor al puntero, asigne un valor al puntero; no es algo raro de hacer.

More Interesting

¿Cuál es el significado del lema de Schwartz-Zippel?

¿Cuál es la diferencia entre una cubierta abierta y una subcubierta finita en relación con la compacidad?

¿Cómo resolver el siguiente problema? ¿Es posible resolver usando árboles de segmentos? ¿Hay algún método eficiente?

¿Cómo evitan los programas de aprendizaje automático / IA la trampa de quedar encerrados en una forma de hacer algo una vez que han encontrado un método exitoso para completar una tarea? ¿Pueden calcular otras soluciones competidoras en paralelo?

¿Por qué la gente siempre critica un doctorado en CS? ¿Por qué existe el título cuando bloquea las oportunidades profesionales?

En términos absolutos, ¿qué son los transistores y los semiconductores?

¿Cómo puede haber una clase de una clase de objetos en la teoría de conjuntos?

Cómo resolver la siguiente ecuación recursiva

¿Qué se entiende por una sólida formación en matemáticas?

Si resolvemos el problema del ciclo de Hamilton en el tiempo P, ¿eso realmente muestra P = NP?

¿Se pueden programar las computadoras con 0,1 y 2? ¿Qué tal 0,1,2 y 3? ¿O son todos los programas manipulaciones de 0 y 1? Nuevos detalles añadidos para explicar.

¿Cómo puede la informática teórica informar el estudio del origen de la vida?

¿Cómo sé cuándo usar números de coma flotante de precisión simple o doble?

¿Cuál es la diferencia entre CS y matemáticas y computación?

¿Se puede aplicar la proporción áurea (Fibonacci) con beneficios en informática?