Comme le sujet l'indique, existe-t-il une différence entre:
? si oui laquelle?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 char (*address)[2] //et char* address[2]
Comme le sujet l'indique, existe-t-il une différence entre:
? si oui laquelle?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 char (*address)[2] //et char* address[2]
Oui il sont différent, le premier est un pointeur sun un tableau de 2 charactères (ou si tu préfère, *address est un tableau de 2 charactères), et le second est un tableau de 2 pointeur sur des charactères (ou si tu préfère un tableau de deux char*).
Okay et si je veux un tableau de pointeurs sur des chars de taille LENGTH, je fais quoi?
(c'est à dire sur des chaines de caractères dont je connais la longueur)...
J'ai pas le choix du format ... Je dois stocker dans un tableau des char* de longueurs connues...
On me donne ça comme exemple mais j'ai un peu du mal à comprendre:
Theoriquement, addresses doit contenir (au plus maxCount) char* de taille ADDRESS_LEN chacun... Est-ce que tout ça est juste?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #define ADDRESS_LEN 32 //... char (*addresses)[ADDRESS_LEN]; addresses = (char (*)[ADDRESS_LEN])malloc(sizeof(char)*ADDRESS_LEN*maxCount); //et je le passe ensuite à une fonction comme cela int pBinarySearch(char *sortedData, char *keyword, char (*addresses)[ADDRESS_LEN], int maxCount) { vector <char*> keys; //... addresses[current_count++] = keys.at(mid);//me dit que "expression must be a modifiable lvalue" //... }
Je réitère, en quoi un tableau bidimensionnel (ou un tableau de tableau si tu le souhaites vraiment) ne convient-il pas ?
Dans le code que tu donnes pour la fonction pBinarySearch(), addresses a simplement besoin d'être un tableau de char*, ce n'est pas lui qui gère la mémoire des éléments pointés par tes char* (puisqu'il existe avant lui). A moins que tu souhaites copier le contenu de la mémoire pointée par ces char* dans addresses et pas seulement leur adresse, mais dans ce cas la ligne addresses[current_count++] = keys.at(mid); est fausse.
Bref, que cherches-tu précisément à faire ?
PS : au passage, on est ici sur le forum C++ pas C.
Desole de m'etre trompe de forum. Le truc c'est que je code en C++ mais que j'ai des contraintes du C... Bref, les prototypes des fonctions me sont imposes (prof).
Du coup, je suis oblige de faire un peu de gymnastique avec les pointeurs.
J'ai donc addresses qui va pointer vers un 32 char... en gros, addresses est un char*. Sauf que j'alloue assez de memoire pour avoir maxCount char* les un en dessous des autres. du coup,
me donne un tableau 2D.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char (*addresses)[ADDRESS_LEN]; addresses = (char (*)[ADDRESS_LEN])malloc(sizeof(char)*ADDRESS_LEN*maxCount);
Pour acceder au premier element j'ai le pointeur addresses.
Je peux donc faire:
Si je fais addresses + 1 , je passe a la deuxieme ligne, pareil debugger de visual est d'accord. par contre ici, addresses + 1 n'equivaut pas a addresses[1].....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 strncpy(*addresses,"tests",5); //rempli les 5 premiers chars de addresses avec "tests", le debugger de visual me le montre bien
Dites moi si je me trompe.
ca aurait ete plus simple d'avoir un char** mais bon, j'ai pas choisi le format....
ps: desole pour le manque d'accent, je suis sur un clavier anglais
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager