Je pensais avoir compris les bases des pointeurs, mais après avoir vérifié la documentation de certaines méthodes de sqlite3, j'ai été déstabilisé, et maintenant je ne suis pas sûr que ma compréhension soit correcte.
Voici un appel à une méthode sqlite3 :
char* dataFilePath = "foobar.sqlite";
if (sqlite3_open(dataFilePath, &database) != SQLITE_OK) {...}
Et voici la déclaration de l'en-tête de la fonction :
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
Comment se fait-il que &database devienne soudainement un pointeur sur un pointeur ?
Un autre appel de méthode pour fermer la connexion à la base de données est : sqlite3_close(database) ;
Avec ce qui suit à l'en-tête de la fonction :
int sqlite3_close(sqlite3 *);
Pourquoi est-ce que c'est juste un pointeur, quand je passe dans un pointeur ? Ne s'agit-il pas d'un pointeur vers un pointeur ?
D'après tous les exemples que j'ai vus, il semble que ce soit toujours l'inverse des fonctions ci-dessus, c'est-à-dire
// function
void foo(someDataType *bar) { ... }
// function call
foo(&bar);
Merci pour votre aide.