2015-09-24 1 views
2

J'ai un pointeur à une double matrice dmatrix que je déclarais à l'aide:Copier et jeté une matrice de flotteur dans une double matrice en utilisant des pointeurs

double* dmatrix = malloc(n*n*sizeof(double)); 

J'ai aussi un pointeur vide à une matrice imatrix, qui a int valeurs pour une matrice de mêmes dimensions. La matrice int est remplie ailleurs dans le programme. Comment puis-je copier les valeurs de imatric à dmatrix en utilisant juste des pointeurs? C'est ce que j'essaie .:

void *a;  
for(int c=0;c<n;c++){ 
    for(int r=0;r<n;r++){ 
    a = ((char *)imatrix+(r*n+c)*sizeof(int)); 
    *(dmatrix+r*n+c) = *(double *)a; 
    } 
} 
+2

Pourquoi le 'imatrix' un pointeur vide? Si vous l'affectez à un pointeur int, vous pouvez simplement l'indexer normalement: 'int * iimatrix = imatrix;/* pour les boucles */dmatrix [r * n + c] = iimatrix [r * n + c]; ' – Kninnug

+0

Que se passe-t-il lorsque vous l'essayez? Est-ce que cela fonctionne comme prévu? Pouvez-vous montrer un exemple de production attendue et réelle? – dbush

+0

Vous devez lancer les * valeurs *, pas les * pointeurs *. Je suis sûr de votre code que vous essayez de faire. En outre, votre titre dit 'float' et' double' mais votre texte dit 'double' et' int'. – 5gon12eder

Répondre

4

Mauvais. 1. Vous dites que imatrix pointe sur la matrice int, pendant que vous le convertissez en char *. Pourquoi? 2. a est censé être un pointeur dans la matrice source. Pourquoi le lancez-vous (double *)?

je ferais quelque chose comme ça:

void* imatrix; 
double* dmatrix; 

double* p_dmatrix = dmatrix; 
int* p_imatrix = imatrix; 

for(int i=0; i< r*c; i++) 
    *p_dmatrix++ = *p_imatrix++; 
+1

Pas besoin de lancer 'imatrix': les conversions vers et depuis les pointeurs' void' sont effectuées automatiquement. – Kninnug

+0

bons points. La réponse sera corrigée – mzu

+0

Les variables 'p_' sont redondantes, la boucle pourrait être' dmatrix [i] = imatrix [i]; ' –