我通过指针将变量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;
}
}
答案 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;
}
}