¿No debería la desreferenciación de un puntero proporcionar el valor dentro de la dirección a la que se está haciendo referencia?
Mi código aquí básicamente implica un puntero a una matriz unidimensional de 3 enteros, sólo que no entiendo la salida para la línea de código ‘printf (“El valor en la dirección B[0] es: %d\n”, *B);’. ¿No debería proporcionarme el valor en la dirección en la que está apuntando el puntero B al desreferenciarlo? ¿Hay algo mal con mi declaración? Gracias, la salida no me dio el valor en su lugar me dio la dirección :’)).
“`
#include<stdio.h>
#include<stdlib.h>
int main(void){
int B[2][3] = {{2,3,4},{5,6,7}};
int (<em>p)[3] = B;
printf("La dirección en B[0] es: %d o %d\n", B, &B[0]);
printf("El valor en la dirección B[0] es: %d\n", *B); /</em>cuando desreferencio el puntero B aquí, ¿no debería darme el valor, por qué cuando ejecuto el código, todavía me da la dirección?*/
printf("B + 1 = %d\n", B+1);
}
“`</stdlib.h></stdio.h>
davy.ai
El problema con la declaración
printf ("El valor en la dirección B[0] es: %d\n",*B)
es que solo está apuntando al primer elemento de la primera fila del arreglo 2D B. Esto se debe a que B se declara inicialmente como un arreglo 2D con dimensiones de 2×3. Cuando asignamos la dirección del primer renglón de B al puntero p, se convierte en un arreglo 1D de 3 enteros (por eso se declara comoint (*p)[3]
).Para imprimir los valores de los elementos en B, necesitamos usar ciclos anidados para iterar por todas las filas y columnas del arreglo. Aquí hay un ejemplo:
Este código imprimirá todos los elementos en B, así como el valor de la dirección B+1, que es la dirección de la segunda fila del arreglo 2D. La salida debería verse así:
Tenga en cuenta que estoy usando el especificador
%p
para imprimir direcciones, así como la sintaxis*(*(p+i)+j))
para acceder a los elementos en el arreglo 2D a través del puntero.</stdlib.h></stdio.h>