Bonjour à tous, j'essaie de créer un programme avec des tableaux. Il n'y a rien de compliqué dans ce que je fais, le problème c'est que je n'arrive pas à corriger mon erreur, j'ai beau chercher sur internet (il y a des pages sur ce sujet je sais) mais je ne comprend pas. Je vous mets le code :
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>
void init(int *t, int n) {
int ligne, colonne;
for (ligne=0; ligne<n; ligne++) {
for (colonne=0; colonne<n; colonne++) {
if (ligne==0) {
t[ligne][colonne] = colonne;
}
else if (ligne!=0 && colonne==0) {
t[ligne][colonne] = ligne;
}
else {
t[ligne][colonne] = 0;
}
}
}
}
void afficher(int *t, int n) {
int i, j;
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
printf("%d\t", t[i][j]);
}
printf("\n\n");
}
}
int main(void) {
int t[11][11];
init(t,11);
afficher(t,11);
}
Et le message d'erreur :
||=== Build file: "no target" in "no project" (compiler: unknown) ===|
||In function 'init':|
|11|error: subscripted value is neither array nor pointer nor vector|
|14|error: subscripted value is neither array nor pointer nor vector|
|17|error: subscripted value is neither array nor pointer nor vector|
||In function 'afficher':|
|27|error: subscripted value is neither array nor pointer nor vector|
||In function 'main':|
|35|warning: passing argument 1 of 'init' from incompatible pointer type|
|6|note: expected 'int *' but argument is of type 'int (*)[11]'|
|36|warning: passing argument 1 of 'afficher' from incompatible pointer type|
|23|note: expected 'int *' but argument is of type 'int (*)[11]'|
||=== Build failed: 4 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
Soyez indulgents svp ça fait longtemps que je n'ai pas fait de C
En effet, la réponse doit se trouver des milliers de fois. En voilà une de plus.
Un tableau ne peut pas être transmis à une fonction, il est automatiquement transformé en un pointeur sur son premier élément. Ainsi un int tab[10] est reçu sont forme du paramètre de type int*. Dans ton cas il s'agit d'un tableau dont les éléments sont eux-même des tableaux. Les éléments du tableau sont des int[11]. D'où le paramètre de la fonction doit être un pointeur sur un int[11]. l'écriture nécessite une parenthèse int (*)[11].
void init( int (*t)[11] , int n ) {
...
On peut aussi l'écrire :
void init( int t[][11] , int n ) {
...
Il est inutile et non recommandé de préciser la première dimension, car en réalité c'est bien un pointeur, et le nombre ne correspondrait à rien dans ce cas. C'est pourquoi il faut transmettre ce nombre sous la forme du paramètre supplémentaire n.
Oui très probablement que la réponse devait être quelque part mais je ne devais pas comprendre, c'est beaucoup plus clair avec tes explications Dalfab merci beaucoup!
Merci pour votre rapidité à tous les 2
Subscripted value is neither array nor pointer nor
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent