C++Builder 程序员博客
28 Aug
#ifndef av_const
#if defined(__GNUC__) && (__GNUC__ > 2 ¦ ¦ __GNUC__ == 2 && __GNUC_MINOR__ > 5)
# define av_const __attribute__((const))
#else
# define av_const
#endif
#endif
下面这2行到底定义了个什么东西?
# define av_const __attribute__((const))
# define av_const
还有:
typedef struct AVRational{
int num; /// < numerator
int den; /// < denominator
} AVRational;
AVRational av_mul_q(AVRational b, AVRational c) av_const;
AVRational av_div_q(AVRational b, AVRational c) av_const;
上面这2个函数定义的后面的av_const(就是上面定义的)表示什么?这个函数是返回了这个结构还是这个结构的指针?
谢谢!
__attribute__ const
该属性只能用于带有数值类型参数的函数上。当重复调用带有数值参数的函数时,由于返回值是相同的,所以此时编译器能够进行优化处理,除第一次需要运算外,其他只需要返回第一次的结果就能够了,进而能够提高效率。该属性主要适用于没有静态状态(static state)和副作用的一些函数,并且返回值仅仅依赖输入的参数。
该回复于2008-08-27 09:06:08被版主删除
下面的typedef是定义了1个结构体
30 Jun
struct CStringData
{
long nRefs; // reference count
int nDataLength;
int nAllocLength;
// TCHAR data[nAllocLength]
TCHAR* data()
{ return (TCHAR*)(this + 1); }
};
// Globals
int rgInitData[] = { -1, 0, 0, 0 };
CStringData* _atltmpDataNil = (CStringData*)&rgInitData;
LPCTSTR _atltmpPchNil = (LPCTSTR)(((BYTE*)&rgInitData) + sizeof(CStringData));
////////////////////////////////////////////////////////////////////////////////////
谁来解释下 最后俩行代码的意思。
&rgInitData
(LPCTSTR)(((BYTE*)&rgInitData) + sizeof(CStringData))
这些 指针 是怎么 变化的???
谢谢
&rgInitData //取rgInitData 的地址
(LPCTSTR)(((BYTE*)&rgInitData) + sizeof(CStringData))
这个得分几步来讲
1、&rgInitData//取得一个地址,也就是指针
2、(BYTE*)&rgInitData//把取得的指针强制转换为BYTE类型的指针
3、sizeof(CStringData)//计算CStringData类型变量的所占的内存长度
4、((BYTE*)&rgInitData)+ sizeof(CStringData))//把步骤2强制转换得来的指针加上步骤3算出来的增量
5、由步骤4算得出一个新的指针,它指向了距离rgInitData后面sizeof(CStringData)的地方,现在把这个指针强制转换为LPCTSTR类型
有点难度哦
19 Jun
CoInitialize(NULL);
Variant ca=Variant::CreateObject("ADOX.Catalog");
AnsiString temp="Provider=Microsoft Jet 4.0 OLE DB Provider;Data Source="+要生成的数据库路径+";Jet OLEDB:Database Password=123";
ca.OleProcedure("Create",temp.c_str());
ca.Clear();
//刚才创建的数据库文件
AnsiString conn;
ADOConnection1->Close();
conn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
conn=conn+DbName;
conn=conn+";Mode=Share Deny Read ¦Share Deny Write;Persist Security Info=True;Jet OLEDB:Database Password=123";
ADOConnection1->ConnectionString=conn;
ADOConnection1->Open();
DataModule1->ADOCommand1->CommandText="Create Table 表名(字段名 类型,字段名 类型)";
DataModule1->ADOCommand1->Execute();
CoUninitialize();
CoInitialize(NULL);//用来初始化ADO环境
Variant ca=Variant::CreateObject("ADOX.Catalog"); //创建一个ADO对象
ca.OleProcedure("Create",temp.c_str());
CoUninitialize();//退出刚刚创建的ADO环境
ca.Clear(); //释放对象
CoInitialize(NULL); //調用前初始化
CoUninitialize(); //不用了通知系統析構。
這是調用COM類型庫需要做的動作,在DLL中使用時需要。在主程序中,因VCL會自行調用,所以不需要重復調用了。
Variant ca=Variant::CreateObject //建立COM物件
ca.OleProcedure //運行指令
ca.Clear(); //釋放
//這是執行ole操作,也就是傳遞指令到相應的COM物件上去,讓別人幫你做事。
ca.Clear();是完事了,告訴別人沒事了,不用傻傻地等指令了,系統可以清除這對象了。
3 Jun
int main(int argc, char* argv[])
{
const int num = 10;
int interval;
int a[num];
for(int i = 0;i < num; i++)
a[i] = i + 1;
cout < < "please input the interval: ";
cin> > interval;
cin.get();
for(int i = 0;i <num;i++)
{
cout < <a[i] < < ", ";
}
cout < <endl;
int k = 1;
int m = -1;
while(1) //??????
{
for(int j = 0; j < interval;)
{
m = (m + 1)%num; //?????
if(a[m]!=0) //??????
j++;
}
if(k == num) break;
cout < <a[m] < < ", ";
a[m]= 0;
k++;
}
cout < < "\nNo. " < <a[m] < < " boy 's win\n ";
cin.get();
请解释下后面打问号的代码
最难让我理解的是 while(1) 这是怎么回事呢? 请高手解答,谢谢!
while(1)
========
不达目的不罢休
while (1) 这种写法 其实是利用C/C++ 语言 的特性,在逻辑表达式里所有的非0 值都被当成true. 这里的意思就是while 条件永远都成立,在if (k==num) break; 退出这个while 循环.
建议仔细看看C 语言
谢谢大家的回复,我已经明白了
豪杰
16 May
TForm2 *fm2=new TForm2(this);
fm2->ShowModal();
delete fm2;
TForm2 *fm2=new TForm2(this); fm2是个指针 这句打开了一个新的TFORM2
fm2->ShowModal(); 使TFORM2窗口设为当前活动窗口
delete fm2; 删除FM2指针
TForm2 *fm2=new TForm2(this); //建立新Form
fm2->ShowModal(); //以模态方式显示窗口 (就是你不关掉fm2就不能切换到程序的其他窗口)
delete fm2; //删除窗口指针(删除窗口指针,窗体就被你销毁了)
呀!是你啊.分数又被你骗去了.