es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sobrescribir el índice del arreglo de la estructura utilizando un nombre corto.

Aquí está lo que estoy intentando hacer.
Estoy tratando de crear un nombre de variable corto para hacer referencia e incluso cambiar el contenido de una estructura en un índice específico (en este caso, el número de índice es 1). Esto haría mi código más limpio.

El problema es que si uso estas líneas:

AB C=aridiculouslylongstructname[1];
C.a=20;
C.b=200;

No puedo hacer que aridiculouslylongstructname[1].a sea igual a C.a cuando establezco el valor de C.a. ¿Hay una mejor manera de modificar el valor en lugar de tener que siempre establecer el valor en aridiculouslylongstructname[1].a?

Aquí está el código completo:

#include <stdio.h>
#include <stdlib.h>

typedef struct{
int a,b;
}AB;

int main(){
AB aridiculouslylongstructname[2];
aridiculouslylongstructname[1].a=10; //establecer el miembro a y el miembro b a 10 y 100 respectivamente
aridiculouslylongstructname[1].b=100;
AB C=aridiculouslylongstructname[1];
printf(“A=%d B=%d\n”,aridiculouslylongstructname[1].a,aridiculouslylongstructname[1].b);
C.a=20; //tratando de sobrescribir el miembro a y el miembro b a 20 y 200 respectivamente
C.b=200;
//y leyéndolo con el miembro original
printf(“A=%d B=%d\n”,aridiculouslylongstructname[1].a,aridiculouslylongstructname[1].b);
return 0;
}</stdlib.h></stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución:

    Puedes utilizar un puntero en lugar de una variable para hacer referencia a la estructura en un índice específico. De esta manera, los cambios realizados en el puntero se reflejarán en los cambios en la estructura original. Aquí tienes cómo puedes modificar el código:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct {
        int a, b;
    } AB;
    
    int main() {
        AB aridiculouslylongstructname[2];
        aridiculouslylongstructname[1].a = 10; //establecer 'a' y 'b' en 10 y 100 respectivamente
        aridiculouslylongstructname[1].b = 100;
        AB *C = &aridiculouslylongstructname[1]; //utilizar un puntero para hacer referencia a la estructura
        printf("A=%d B=%d\n", aridiculouslylongstructname[1].a, aridiculouslylongstructname[1].b);
        C->a = 20; //sobrescribir 'a' y 'b' en 20 y 200 respectivamente modificando el puntero
        C->b = 200;
        //y leerlo con el miembro original
        printf("A=%d B=%d\n", aridiculouslylongstructname[1].a, aridiculouslylongstructname[1].b);
        return 0;
    }
    

    En el código modificado, declaramos un puntero C que apunta a la estructura en el índice 1. Modificamos el contenido de la estructura accediendo a sus miembros a través del puntero C utilizando el operador ->. Esto nos permite modificar los valores de aridiculouslylongstructname[1].a y aridiculouslylongstructname[1].b a través de C. De esta manera, los cambios realizados a través de C también se reflejarán en la estructura original.</stdlib.h></stdio.h>

Comments are closed.