2014-03-19 51 views
0

我通过指针将变量cn传递给函数myconnect。 在加入调试器时,cn在myconnect()内正确。但不在main()。我不能这样做(见下面的代码)?当我在main中进行初始化和连接时,它工作。我可以将cn传递给其他函数。但我宁愿从那里排除它(主要),并在不同的功能。OCILib - 变量的可见性

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

可变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; 
    } 
}