OCILib - 变量的可见性

时间:2014-03-19 11:51:57

标签: c oci

我通过指针将变量cn传递给函数myconnect。 踩到调试器时,myconnect()内的cn是正确的。但main()中没有了。我不能这样做(见下面的代码)?当我在main中进行初始化和连接时,它可以工作。我可以将cn传递给其他函数。但我更愿意将它从那里(主要)排除,并具有单独的功能。

int myconnect(OCI_Connection* cn  )
{
  if (!OCI_Initialize(err_handler, NULL, OCI_ENV_DEFAULT))
  return 0;
  cn = OCI_ConnectionCreate( DB, DBUSER, DBPASS, OCI_SESSION_DEFAULT);
  if (cn == NULL) return 0;

  return 1;
}

int main()
{
  OCI_Connection* cn;

  if (myconnect(cn) == 0)
  {
    dbErr =1;
  }
}

1 个答案:

答案 0 :(得分:1)

变量cn通过值传递给函数myconnect,即函数接收副本并为该副本赋值。这对main无效。

要产生效果,您必须通过引用传递它。在C中,这意味着你必须传递一个指向变量的指针,该变量本身就是一个指针:

int myconnect(OCI_Connection** cn)
{
  if (!OCI_Initialize(err_handler, NULL, OCI_ENV_DEFAULT))
      return 0;
  *cn = OCI_ConnectionCreate(DB, DBUSER, DBPASS, OCI_SESSION_DEFAULT);
  if (*cn == NULL)
      return 0;

  return 1;
}

int main()
{
  OCI_Connection* cn;

  if (myconnect(&cn) == 0)
  {
    dbErr =1;
  }
}