Lütfen beni yanlış anladığım yerde düzeltin.Neden sqlite3_open için çift işaretçiyi kullanıyoruz ** ve sqlite3_prepare için biz pointer kullanıyoruz *
Bu cevabı https://stackoverflow.com/a/833124/5175709 okudum ve anladığım şu ki, nesne uzayabilir ve alan bittiğinden bellek alanı da değişebilirdi. Fakat burada iki sqlite3 sözdizimi nesneye farklı şekilde başvuruyor. NİYE YA?
Elimizdeki sqlite3_open: sqlite3 **ppDb
SQLITE_API int SQLITE_STDCALL sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
Ve sqlite3_prepare için elimizde: nedense sana bir veritabanı bağlantısı nesnesi vermek sqlite3 *db
SQLITE_API int SQLITE_STDCALL sqlite3_prepare_v2(
sqlite3 *db, /* Database handle */
const char *zSql, /* SQL statement, UTF-8 encoded */
int nByte, /* Maximum length of zSql in bytes. */
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
const char **pzTail /* OUT: Pointer to unused portion of zSql */
Mükemmel cevap C32 sayesinde. Yani bunu yaptığımızın tek sebebi koruma amaçlı mı? Yani bir hata varsa, sqlite3 * 'nil' i işaret ederdi? Hafızanın genişlemesi ne olacak? Hala bunun üzerinde kafam karıştı. Bu konuda da ayrıntılı bilgi verir misiniz? – Honey
@ asma22 Bir hatanın meydana gelip gelmediğini tespit etmenin tek yolu, dönüş değerine bakmaktır; [SQLite hala açılmasa bile bir veritabanı işaretçisi yazacaktır] (http://sqlite.org/c3ref/open.html) (büyük olasılıkla bundan bir hata mesajı alabilirsiniz). SQLite kullanarak 'sqlite3' yapısının tam yapısı programdan gizlendiğinden, SQLite, API veya ABI'yi kesmeden, alandan alan ekleme veya çıkarma (kullandığı bellek miktarını değiştirebilir) için ücretsizdir. –