Quiero hacer referencia a una nueva matriz para abordar desde otra matriz en código C como este:

int main()
{
    int a[6] = {1,2,3,4,5,6};
    int b[6];
    unsigned long long int *c = &a[5];
    unsigned long long int *d = &b[5];
    int size = 6;
    for(;size>0;size--,c--,d--){
        *d = *c;
    }
    return 0;
}

Pero mi código no funcionó. ¿puedes decirme qué está mal en este código?

1
user3123721 25 ago. 2020 a las 18:15

2 respuestas

La mejor respuesta

El tipo de datos de su puntero no coincide con el tipo de datos de la matriz

4
Dan Mullin 25 ago. 2020 a las 15:16

Estas declaraciones

unsigned long long int *c = &a[5];
unsigned long long int *d = &b[5];

Son incorrectos porque los objetos declarados tienen el tipo unsigned long long int * pero se inicializan mediante expresiones del tipo int *. Por lo tanto, al eliminar la referencia a los punteros declarados, puede obtener resultados inesperados.

Si desea utilizar la aritmética del puntero en un bucle for, por ejemplo, para copiar la primera matriz en la segunda matriz en orden inverso, el programa puede verse de la siguiente manera.

#include <stdio.h>

int main(void)
{
    enum { N = 6 };
    int a[N] = { 1, 2, 3, 4, 5, 6 };
    int b[N];
    
    for ( int * c = a + N, *d = b; c != a; )
    {
        *d++ = *--c;
    }
    
    for ( const int *d = b; d != b + N; ++d )
    {
        printf( "%d ", *d );
    }
    
    putchar ( '\n' );
    
    return 0;
}

La salida del programa es

6 5 4 3 2 1 
2
Vlad from Moscow 25 ago. 2020 a las 15:38