2017-06-19 1 views
-1

Je rencontre un cas où je veux avoir un tableau de pointeurs (M lignes, N cols), chaque membre de ce tableau pointe vers un vecteur flottant (longueur L). Pourriez-vous me dire comment l'établir? J'espère pouvoir l'établir dynamiquement parce que d'habitude je ne connais pas M, N et L d'abord et L peut être différent pour le vecteur de différence. Mon occasion est que j'ai besoin de lire la fonction verte avec une distance différente (NDIS) et la profondeur (NDP). J'ai donc besoin de créer quelque chose comme * grn [NDP] [NDIS]. puis utilisez chaque pointeur de ce tableau pour pointer vers un composant de la fonction verte. En passant, je pense que c'est un peu complexe que de définir un tableau de pointeurs de taille connue. Pensez-vous que cela vaut la peine d'utiliser ce type de structure de données? J'essaie d'écrire un programme pour faire face à l'observation, dont je ne sais généralement pas la taille. Cependant, je peux utiliser un tableau de pointeurs de taille fixe. Si le total des données est plus grand que la taille donnée, je pourrais ignorer la partie surdimensionnée. Mais j'espère pouvoir les utiliser tous.Comment allouer dynamiquement un tableau 2D de POINTERS dans ANSI C?

+1

Cela va sûrement vous aider - [Stanford CS] (http://cslibrary.stanford.edu/) – Ganesh

+0

Peut-être que je n'ai pas décrit ma question explicitement. Je veux faire un tableau de 2 d dont chaque terme est un pointeur POINTER vers un vecteur flottant. Mon cas est que j'ai besoin de lire la fonction verte avec une distance et une profondeur différentes. J'ai donc besoin de créer quelque chose comme * grn [NDP] [NDIS]. – mlin

Répondre

0

Vous devez utiliser le tableau 2-d et doivent allouer Dynamiquement, comme ceci:

int i, j; 
float **arr; 
arr = malloc(sizeof(float*) * Size1); //1st array setup 
for(i = 0; i < Size1; i++) 
    arr[i] = malloc(sizeof(float*) * Size2); // 2nd array setup at each element of 1st array 

maintenant d'y accéder comme ceci:

for(i = 0; i < Size1; i++) 
    for(j = 0; j < Size2; j++) 
    printf("%f", arr[i][j]); 

Size1 & Size2 sont des tailles de première tableau et deuxième tableau.

Vous pouvez configurer différentes tailles de tableaux individuels dans les premiers éléments du tableau, pour cela vous devez le faire sans boucle et en changeant la variable Size2. J'espère que cela aide.

+0

Il est recommandé de ne pas lancer la valeur de retour de 'malloc()' comme dans cet exemple – Toby

+0

si vous travaillez avec des compilateurs stricts (je veux dire des règles de contrôle strictes comme C++), ils jettent des erreurs pour ce typecasting . Donc, cela devient une pratique recommandée dans ma connaissance. – anil

+1

Si vous utilisez C++, vous répondez incorrectement à une question C. lancer du retour de malloc est toujours une mauvaise pratique à moins que vous n'utilisiez une très ancienne version de C (comme K & R C). Même C89 promeut correctement les pointeurs vides, ce qui signifie qu'aucun casting n'est requis. Voir https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc – Toby