如题,需要兼顾时间与空间效率。有如下代码,哪个是指针传递,哪个是引用传递?
main()
{
DB_ENV *myEnv;
DB *dbp;
int ret;
u_int32_t env_flags;
CreateTable(*myEnv,dbp,ret,env_flags,_T("database.db"),_T("table1"));
}void CreateTable(DB_ENV &sEnv,DB *sDbp,int &sRet,u_int32_t &sFlag,CString database_name,CString table_name)
{
sDbp=NULL;
sRet = db_create(&sDbp, &sEnv, 0);
sFlag = DB_CREATE;
sRet = sDbp->open(sDbp, NULL, database_name, table_name, DB_BTREE, sFlag, 0);
sDbp->close(sDbp,0);
}
main()
{
DB_ENV *myEnv;
DB *dbp;
int ret;
u_int32_t env_flags;
CreateTable(*myEnv,dbp,ret,env_flags,_T("database.db"),_T("table1"));
}void CreateTable(DB_ENV &sEnv,DB *sDbp,int &sRet,u_int32_t &sFlag,CString database_name,CString table_name)
{
sDbp=NULL;
sRet = db_create(&sDbp, &sEnv, 0);
sFlag = DB_CREATE;
sRet = sDbp->open(sDbp, NULL, database_name, table_name, DB_BTREE, sFlag, 0);
sDbp->close(sDbp,0);
}
解决方案 »
- MFC界面 Tab Control控件 键盘怎么切换TAB Page?
- CTlFactory& TlFactory = CTlFactory::GetInstance();"&"符号
- dilog
- 关天MFC windows程序设计和windows程序设计的问题
- mscomm控件 接收数据的问题
- windows程学设计里面的/platform sdk/user interface servie/....在哪里能找到?
- 如何在一个菜单项里控制另一个菜单项的状态(如变灰)
- 什么数据库支持位图数据类型
- 请问如何使用设备无关位图中的图象数据在DC中显示位图?
- MFC 一个可以正常运行的线程. 关闭后. 再打开.为什么就不能运行呢?
- socket发送广播和单播消息的问题???????
- 关于MFC中CMemoryException的困惑
void CreateTable(DB_ENV &sEnv,DB &sDbp,int &sRet,u_int32_t &sFlag,CString database_name,CString table_name)
如何在内部使用sDbp啊,使用BerkeleyDB的朋友请看一下。
我估计这两种类型是为了使高级语言更容易编写和纠错。
在高级语言中,如果你写成void CreateTable(DB_ENV *sEnv……)这样,那么sEnv所指就有可能是空地址或者不正确的地址。如果你写成void CreateTable(DB_ENV &sEnv……),那么除非你在实参中使用了*运算符,否则sEnv就不可能指向一个空地址或错误地址。
{
sDbp=NULL;
sRet = db_create(&sDbp, &sEnv, 0);
sFlag = DB_CREATE;
sRet = sDbp->open(sDbp, NULL, database_name, table_name, DB_BTREE, sFlag, 0);
sDbp->close(sDbp,0);
}
sRet = db_create(&sDbp, &sEnv, 0);//这行代码有毛病吧!!!代码有什么用意呢?&sDbp只是个临时地址
在输出时传指针有个特点,就是一看到你的函数调用,能猜测出大概是作为输出的,因为前面有个&。
17:
18: a( &xx );
004010A8 lea eax,[ebp-4]
004010AB push eax
004010AC call @ILT+5(a) (0040100a)
004010B1 add esp,4
19: b( xx );
004010B4 lea ecx,[ebp-4]
004010B7 push ecx
004010B8 call @ILT+0(b) (00401005)
004010BD add esp,4汇编中还真是没什么差别。