2014-03-19 54 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; 
    } 
}