Sqlite3,我不明白为什么我的指针被返回为空

时间:2015-01-12 15:18:40

标签: c++ linux sqlite

我正在编写一个打开数据库的函数,这就是它到目前为止的样子:

bool
Sqlite3::openDB(std::string filename, sqlite3* db)
{
  std::ifstream file ( filename.c_str() );  
  if( !file )
  {
    std::cerr << "Can't open database, file not found. " << std::endl;
    return false;
  }
  file.close();

  if( sqlite3_open(filename.c_str(), &db) )
  {
    std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
    sqlite3_close(db);
    return false;
  }
std::cout << (int)db << std::endl; // added to check the pointer (3)
  return true;
}

在main()中:

int main(int argc, char **argv)
{
  sqlite3 *db = nullptr;

  std::cout << (int)db << std::endl; // (1)

  // Open Database 
  sqlite3_engine.openDB("./bedrock.db",db);
  std::cout << (int)db << std::endl; // (2)

/*...*/

}

在(1)我得到空,在(3)我得到的东西不是空的但在(2)我得到的东西是空的而我不明白为什么......

1 个答案:

答案 0 :(得分:1)

函数参数按值传递。 openDB()获取db变量的副本,修改副本并打印出来。原始变量未被修改。

如果您想修改参数,请按引用传递(例如sqlite3 *&)。