main 函数
int main() { sqlite *pDb; openDataBase(pDb); return 0}
错误的openDataBase() 函数
int OpenDataBase(sqlite3 *pDb_f) { int rc; rc = sqlite3_open("sqlite.db", &pDb_f); if (rc == SQLITE_OK) { // success! return 0 return 0; } else { // fail! return 1 return 1; }}
main 函数
int main() { sqlite *pDb; openDataBase(&pDb); return 0}
正确的 openDataBase() 函数
int OpenDataBase(sqlite3 **ppDb_f) { int rc; rc = sqlite3_open("sqlite.db", ppD_f); if (rc == SQLITE_OK) { // success! return 0 return 0; } else { // fail! return 1 return 1; }}
错误分析:
在原来的 openDataBase() 函数中,pDb 传递给形参 pDb_f,openDataBase() 只是对形参 pDb_f 进行了修改,pDB 并没有被改变。改正之后,pDb 将自己的地址传递给形参 ppDb_f,openDataBase() 函数对 ppDb_f 的改变将直接影响 pDb。