??xml version="1.0" encoding="utf-8" standalone="yes"?> 2Q一个类拯的函敎ͼ要求用C?br />例如Q?br />class A { class B { int main() {
来自:bookread
此书架对287人里?span id=pp>208人有?
CE序设计教程
Q美QH.M.Deitel{著 薛万鹏等?/ 2000q??/ 机械工业出版C?/ 33?/ 787*1092 1/16 /
C陷阱与缺?/a>
Andrew Koenig?高巍?/ 2002q?1?/ 人民邮电(sh)出版C?/ 30?/ 720*980 1/16 /
C语言接口与实现——创建可重用软g的技?/a>
[]汉森 著,傅蓉{??/ 01 1 2004 12:00AM / 机械工业出版C?/ 35?/ 787*1092 1/16 /
C语言参考手册(原书W?版)(j)
Q美QSamuel P.Harbison III/Guy L.Steele Jr.?׃潘等?/ 2003q??/ 机械工业出版C?/ 39?/ 787*1092 1/16 /
C语言参考手册(W五版)(j)Q英文版Q?/a>
哈比,斯蒂??/ 06 1 2003 12:00AM / 人民邮电(sh)出版C?/ 45?/ 16开 /
C专家~程
Peter Van Der Linden?徐L?/ 2002q?2?/ 人民邮电(sh)出版C?/ 40?/ 800*1000 1/16 /
CE序设计语言Q第2?#183;新版Q习(fn)题解{?/a>
[]汤朵Q[]吉米拜尔 著,杨涛{??/ 01 1 2004 12:00AM / 机械工业出版C?/ 15?/ 787*1092 1/16 /
CE序设计语言(W??#183;新版)
Q美Q克汉Q()(j)里奇 著,徐宝文,李志 ?/ 01 1 2004 12:00AM / 机械工业出版C?/ 30?/ 787*1092 1/16 /
CE序设计语言W二版习(fn)题解{(W二?Q英文媄(jing)印版Q?/a>
Clovis L.Tondo,Scott E.Gimpel / 2000-3-1 / 清华大学出版C?/ 12?/
CE序设计语言
Brian W.Kernighan / 1997q??/ 清华大学出版C?/ 0?/ 850*1168 1/32 /
]]>
http://blog.csdn.net/ruibird/archive/2007/03/31/1547882.aspx
]]>
http://www.vckbase.com/document/viewdoc/?id=957
]]>
{
(tng) (tng) (tng) (tng) (tng) (tng)int a,b;
(tng) (tng) (tng) (tng) (tng) (tng)int i;
(tng) (tng) (tng) (tng) (tng) (tng)a=b=1;
(tng) (tng) (tng) (tng) (tng) (tng)for(i=1;i<100;i++)
(tng) (tng) (tng) (tng) (tng) (tng){
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) printf("%4d%4d",a,b);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) a+=b;
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) b+=a;
(tng) (tng) (tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng) (tng) (tng)printf("\n");
}
]]>
(tng) #include (tng) <conio.h> (tng)
(tng) #include (tng) <stdarg.h> (tng)
(tng) #include (tng) <stdio.h> (tng)
(tng) #include (tng) <stdlib.h> (tng)
(tng) #include (tng) "winsock.h" (tng)
(tng) #include (tng) "mysql.h" (tng)
(tng) (tng)
(tng) MYSQL (tng) (tng) (tng) (tng) (tng) *mysql (tng) = (tng) NULL; (tng)
(tng) (tng)
(tng) void (tng) MySQLError(void) (tng)
(tng) { (tng)
(tng) fprintf(stderr, (tng) "%s\n", (tng) mysql_error(mysql)); (tng)
(tng) exit(1); (tng)
(tng) } (tng)
(tng) (tng)
(tng) void (tng) ExecuteSQL(char (tng) *fmt, (tng) ...) (tng)
(tng) { (tng)
(tng) char (tng) SQL[1000] (tng) = (tng) {0}; (tng)
(tng) int (tng) (tng) retval; (tng)
(tng) va_list (tng) args; (tng)
(tng) va_start(args, (tng) fmt); (tng)
(tng) if (tng) (_vsnprintf(SQL, (tng) sizeof(SQL)-1, (tng) fmt, (tng) args) (tng) < (tng) 0) (tng)
(tng) { (tng)
(tng) fprintf(stderr, (tng) "SQL (tng) query (tng) truncated! (tng) Increase (tng) SQL (tng) buffer (tng) size (tng) in (tng) ExecuteSQL\n"); (tng)
(tng) exit(1); (tng)
(tng) } (tng)
(tng) va_end(args); (tng)
(tng) retval (tng) = (tng) mysql_query(mysql, (tng) SQL); (tng)
(tng) if (tng) (retval) (tng)
(tng) { (tng)
(tng) fprintf(stderr, (tng) "Original (tng) SQL (tng) Statement: (tng) %s\n", (tng) SQL); (tng)
(tng) fprintf(stderr, (tng) "%s\n", (tng) mysql_error(mysql)); (tng)
(tng) exit(2); (tng)
(tng) } (tng)
(tng) } (tng)
(tng) (tng)
(tng) int (tng) main() (tng)
(tng) { (tng)
(tng) UINT (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) i; (tng)
(tng) UINT (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) FieldCount; (tng)
(tng) MYSQL_RES (tng) (tng) (tng) *res (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) = (tng) NULL; (tng)
(tng) MYSQL_ROW (tng) (tng) (tng) (tng) row (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) = (tng) NULL; (tng)
(tng) MYSQL_FIELD (tng) *field; (tng)
(tng) (tng)
(tng) char (tng) (tng) (tng) (tng) (tng) (tng) *DBName (tng) (tng) (tng) (tng) (tng) (tng) = (tng) "Test"; (tng)
(tng) char (tng) (tng) (tng) (tng) (tng) (tng) *TableName (tng) (tng) (tng) = (tng) "People"; (tng)
(tng) char (tng) (tng) (tng) (tng) (tng) (tng) *CreateDB (tng) (tng) (tng) (tng) = (tng) "CREATE (tng) DATABASE (tng) IF (tng) NOT (tng) EXISTS (tng) %s"; (tng)
(tng) char (tng) (tng) (tng) (tng) (tng) (tng) *DropTable (tng) (tng) (tng) = (tng) "DROP (tng) TABLE (tng) IF (tng) EXISTS (tng) %s"; (tng)
(tng) char (tng) (tng) (tng) (tng) (tng) (tng) *CreateTable (tng) = (tng) "CREATE (tng) TABLE (tng) IF (tng) NOT (tng) EXISTS (tng) %s (tng) (\n" (tng)
(tng) (tng) "ID (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) INT (tng) UNSIGNED (tng) AUTO_INCREMENT, (tng) \n" (tng)
(tng) (tng) "FirstName (tng) (tng) VARCHAR(32), (tng) \n" (tng)
(tng) (tng) "MiddleName (tng) VARCHAR(32), (tng) \n" (tng)
(tng) (tng) "LastName (tng) (tng) (tng) VARCHAR(32), (tng) \n" (tng)
(tng) (tng) "Address1 (tng) (tng) (tng) VARCHAR(50), (tng) \n" (tng)
(tng) (tng) "Address2 (tng) (tng) (tng) VARCHAR(50), (tng) \n" (tng)
(tng) (tng) "City (tng) (tng) (tng) (tng) (tng) (tng) (tng) VARCHAR(50), (tng) \n" (tng)
(tng) (tng) "State (tng) (tng) (tng) (tng) (tng) (tng) VARCHAR(2), (tng) \n" (tng)
(tng) (tng) "Zip (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) VARCHAR(5), (tng) \n" (tng)
(tng) (tng) "Email (tng) (tng) (tng) (tng) (tng) (tng) VARCHAR(50), (tng) \n" (tng)
(tng) (tng) "Gender (tng) (tng) (tng) (tng) (tng) VARCHAR(1), (tng) \n" (tng)
(tng) (tng) "WorkPhone (tng) (tng) VARCHAR(50), (tng) \n" (tng)
(tng) (tng) "HomePhone (tng) (tng) VARCHAR(50), (tng) \n" (tng)
(tng) (tng) "CellPhone (tng) (tng) VARCHAR(50), (tng) \n" (tng)
(tng) (tng) "BirthDate (tng) (tng) DATE (tng) NULL, (tng) \n" (tng)
(tng) (tng) "Primary (tng) Key (tng) (ID) (tng) \n" (tng)
(tng) (tng) ")\n"; (tng)
(tng) char (tng) (tng) (tng) (tng) (tng) (tng) *AddRecord (tng) (tng) (tng) = (tng) "INSERT (tng) INTO (tng) %s (tng) (FirstName, (tng) LastName) (tng) VALUES (tng) ('FirstName (tng) %03d', (tng) 'LastName (tng) %03d')"; (tng)
(tng) char (tng) (tng) (tng) (tng) (tng) (tng) *GetRecords (tng) (tng) = (tng) "SELECT (tng) ID, (tng) FirstName, (tng) LastName (tng) FROM (tng) %s"; (tng)
(tng) (tng)
(tng) (tng)
(tng) (tng)
(tng) // (tng) Initialize (tng) MySQL (tng)
(tng) mysql (tng) = (tng) mysql_init(NULL); (tng)
(tng) (tng)
(tng) // (tng) Connect (tng) to (tng) MySQL (tng)
(tng) if (tng) (!(mysql_real_connect(mysql, (tng) "localhost", (tng) "admin", (tng) "", (tng) NULL, (tng) mysql->port, (tng) 0, (tng) 0))) (tng) (tng)
(tng) MySQLError(); (tng)
(tng) (tng)
(tng) // (tng) Create (tng) database (tng)
(tng) ExecuteSQL(CreateDB, (tng) DBName); (tng)
(tng) (tng)
(tng) // (tng) Connect (tng) to (tng) temporary (tng) database (tng)
(tng) if (tng) (mysql_select_db(mysql, (tng) DBName)) (tng)
(tng) MySQLError(); (tng)
(tng) (tng)
(tng) // (tng) Delete (tng) table (tng) if (tng) it (tng) already (tng) exists. (tng)
(tng) ExecuteSQL(DropTable, (tng) TableName); (tng)
(tng) (tng)
(tng) // (tng) Create (tng) table (tng)
(tng) ExecuteSQL(CreateTable, (tng) TableName); (tng)
(tng) (tng)
(tng) // (tng) Insert (tng) some (tng) data (tng) into (tng) the (tng) table. (tng)
(tng) for (tng) (i (tng) = (tng) 0; (tng) i (tng) < (tng) 200; (tng) i++) (tng)
(tng) ExecuteSQL(AddRecord, (tng) TableName, (tng) i, (tng) i); (tng)
(tng) (tng)
(tng) // (tng) Execute (tng) query (tng)
(tng) ExecuteSQL(GetRecords, (tng) TableName); (tng)
(tng) (tng)
(tng) // (tng) Store (tng) the (tng) recordset (tng)
(tng) if (tng) ((res (tng) = (tng) mysql_store_result(mysql)) (tng) == (tng) NULL) (tng)
(tng) MySQLError(); (tng)
(tng) (tng)
(tng) // (tng) Print (tng) the (tng) recordset (tng)
(tng) printf("Table (tng) %s\n", (tng) TableName); (tng)
(tng) while((field (tng) = (tng) mysql_fetch_field(res)) (tng) != (tng) NULL) (tng)
(tng) printf("%s\t", (tng) field->name); (tng)
(tng) printf("\n"); (tng)
(tng) FieldCount (tng) = (tng) mysql_num_fields(res); (tng)
(tng) while((row (tng) = (tng) mysql_fetch_row(res)) (tng) != (tng) NULL) (tng) (tng)
(tng) { (tng)
(tng) for (tng) (i (tng) = (tng) 0; (tng) i (tng) < (tng) FieldCount; (tng) i++) (tng) (tng)
(tng) printf("%s\t", (tng) row[i]); (tng)
(tng) printf("\n"); (tng)
(tng) } (tng)
(tng) printf("\nTotal (tng) rows: (tng) %d\n", (tng) mysql_num_rows(res)); (tng)
(tng) (tng)
(tng) // (tng) Free (tng) the (tng) recordset (tng)
(tng) mysql_free_result(res); (tng)
(tng) (tng)
(tng) // (tng) Close (tng) the (tng) connection (tng)
(tng) mysql_close(mysql); (tng)
(tng) (tng)
(tng) printf("\nPrint (tng) any (tng) key (tng) to (tng) continue...\n"); (tng)
(tng) getche(); (tng)
(tng) } (tng)
(tng) (tng)
(tng) 如果有问题,请加入mysql++.lib (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) void mysql_close(MYSQL *connection);关闭一个连接?br />3Q?tng) (tng) (tng) (tng)?执行SQL语句
mysql_select_dbQMYSQL *connection,const char *db_nameQ?选定某个数据库?br /> (tng) (tng) (tng) (tng) int mysql_query(MYSQL *connection,const char *query)//他将执行query语句Q运行成功将q回0Q例如mysql_query(conn_ptr, Create table cert_info(...),创Z个名为cert_info的表Q几乎所有的SQL语句都能q么执行。呵呵,是不是显得很单,他就和命令行中输入的SQL语句差不多。在使用上面函数的时候一般会(x)使用
(tng) (tng) (tng) (tng) my_ulonglong mysql_affected_rows(MYSQL *connection)Q这个函数返回的是mysql_query对进行改动的行的数量?br />4Q?tng) (tng) (tng) (tng)?处理(g)索到的数?br />当我们可以执行SQL语句以后Q那么就很容易执行增加删除修改等操作Q但是假若检索出来的数据存储在哪里呢Q?br /> (tng) (tng) (tng) (tng) MYSQL_RES *mysql_use_result(MYSQL *connection)q个函数得到一个连接对象返回一个结果集合指针,出错时返回NULL。不q他只是q回一个集合对象初始化来接收数据,q没有将M(g)索到的数据返回到l果集合中?br /> (tng) (tng) (tng) (tng) MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)q个函数获得mysql_use_resul得到的结果结构体Qƈ从中(g)索单个行Qƈq回分配l行l构体的数据Q没有更多数据或出错Ӟq回NULL?br /> (tng) (tng) (tng) (tng) Unsigned int mysql_field_count(MYSQL *connection)它得C个连接对象ƈq回在集合中字段的数目?br />于是有上面的基础我们可以理解下面这D了(jin)Q(没有错误处理Q?br />mysql_init(&conn_ptr);
mysql_real_connect(conn_ptr,"localhost","sagely","secret","ra",0,NULL,0);
mysql_query(conn_ptr,"SELECT * form usr_info);
res_ptr=mysql_use_result(&conn_ptr);
sqlrow=mysql_fetch_row(res_ptr);
for(int i=0;i<mysql_field_count(&conn_ptr);i++){printf("%s ",sqlrow);}
(tng) (tng) (tng) (tng) MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)它返回的是列的信息,比如列的名称Q列所在表名称{等Q有?jin)这个就可以列标题(sh)数据想对应h?jin)?br />
]]>
(tng)
本文主要包括二个部分Q第一部分重点介绍在VC中,怎么样采用sizeof来求l构的大,以及(qing)Ҏ(gu)出现的问题,q给?gu)决问题的?gu)Q第二部分ȝ出VC中sizeof的主要用法?br />
1?sizeof应用在结构上的情?br />
L(fng)下面的结构:(x)
struct MyStruct
{
double dda1;
char dda;
int type
};
对结构MyStruct采用sizeof?x)出C么结果呢Qsizeof(MyStruct)为多呢Q也怽?x)这hQ?br />
sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13
但是当在VC中测试上面结构的大小Ӟ你会(x)发现sizeof(MyStruct)?6。你知道Z么在VC中会(x)得出q样一个结果吗Q?br />
其实Q这是VC对变量存储的一个特D处理。ؓ(f)?jin)提高CPU的存储速度QVC对一些变量的起始地址做了(jin)“对齐”处理。在默认情况下,VC规定各成员变量存攄起始地址相对于结构的起始地址的偏U量必须变量的类型所占用的字节数的倍数。下面列出常用类型的寚w方式(vc6.0,32位系l??br />
cd
寚w方式Q变量存攄起始地址相对于结构的起始地址的偏U量Q?br />
Char
偏移量必Mؓ(f)sizeof(char)?的倍数
int
偏移量必Mؓ(f)sizeof(int)?的倍数
float
偏移量必Mؓ(f)sizeof(float)?的倍数
double
偏移量必Mؓ(f)sizeof(double)?的倍数
Short
偏移量必Mؓ(f)sizeof(short)?的倍数
各成员变量在存放的时候根据在l构中出现的序依次甌I间Q同时按照上面的寚w方式调整位置Q空~的字节VC?x)自动填充。同时VCZ(jin)保l构的大ؓ(f)l构的字节边界数Q即该结构中占用最大空间的cd所占用的字节数Q的倍数Q所以在为最后一个成员变量申L(fng)间后Q还?sh)(x)根据需要自动填充空~的字节?br />
下面用前面的例子来说明VC到底怎么h存放l构的?br />
struct MyStruct
{
double dda1;
char dda;
int type
}Q?br />
Z面的l构分配I间的时候,VCҎ(gu)成员变量出现的顺序和寚w方式Q先为第一个成员dda1分配I间Q其起始地址跟结构的起始地址相同Q刚好偏U量0刚好为sizeof(double)的倍数Q,该成员变量占用sizeof(double)=8个字节;接下来ؓ(f)W二个成员dda分配I间Q这时下一个可以分配的地址对于l构的v始地址的偏U量?Q是sizeof(char)的倍数Q所以把dda存放在偏U量?的地Ҏ(gu)_齐方式,该成员变量占用sizeof(char)=1个字节;接下来ؓ(f)W三个成员type分配I间Q这时下一个可以分配的地址对于l构的v始地址的偏U量?Q不是sizeof(int)=4的倍数Qؓ(f)?jin)满_齐方式对偏移量的U束问题QVC自动填充3个字节(q三个字节没有放什么东西)(j)Q这时下一个可以分配的地址对于l构的v始地址的偏U量?2Q刚好是sizeof(int)=4的倍数Q所以把type存放在偏U量?2的地方,该成员变量占用sizeof(int)=4个字节;q时整个l构的成员变量已l都分配?jin)空_(d)ȝ占用的空间大ؓ(f)Q?+1+3+4=16Q刚好ؓ(f)l构的字节边界数Q即l构中占用最大空间的cd所占用的字节数sizeof(double)=8Q的倍数Q所以没有空~的字节需要填充。所以整个结构的大小为:(x)sizeof(MyStruct)=8+1+3+4=16Q其中有3个字节是VC自动填充的,没有放Q何有意义的东ѝ?br />
下面再D个例子,交换一下上面的MyStruct的成员变量的位置Q它变成下面的情况Q?br />
struct MyStruct
{
char dda;
double dda1;
int type
}Q?br />
q个l构占用的空间ؓ(f)多大呢?在VC6.0环境下,可以得到sizeof(MyStruc)?4。结合上面提到的分配I间的一些原则,分析下VC怎么样ؓ(f)上面的结构分配空间的。(单说明)(j)
struct MyStruct
{
char dda;//偏移量ؓ(f)0Q满_齐方式,dda占用1个字节;
double dda1;//下一个可用的地址的偏U量?Q不是sizeof(double)=8
//的倍数Q需要补?个字节才能偏移量变?sh)?Q满_?br />
//方式Q,因此VC自动填充7个字节,dda1存放在偏U量?
//的地址上,它占?个字节?br />
int typeQ?/下一个可用的地址的偏U量?6Q是sizeof(int)=4的?br />
//敎ͼ满int的对齐方式,所以不需要VC自动填充Qtype?br />
//攑֜偏移量ؓ(f)16的地址上,它占?个字节?br />
}Q?/所有成员变量都分配?jin)空_(d)I间ȝ大小?+7+8+4=20Q不是结?br />
//的节边界敎ͼ即结构中占用最大空间的cd所占用的字节数sizeof
//(double)=8Q的倍数Q所以需要填?个字节,以满结构的大小?br />
//sizeof(double)=8的倍数?br />
所以该l构ȝ大小为:(x)sizeof(MyStruc)?+7+8+4+4=24。其中ȝ?+4=11个字节是VC自动填充的,没有放Q何有意义的东ѝ?br />
VC对结构的存储的特D处理确实提高CPU存储变量的速度Q但是有时候也带来?jin)一些麻?ch),我们也屏蔽掉变量默认的对齐方式,自己可以讑֮变量的对齐方式?br />
VC中提供了(jin)#pragma pack(n)来设定变量以n字节寚w方式。n字节寚w是说变量存攄起始地址的偏U量有两U情况:(x)W一、如果n大于{于该变量所占用的字节数Q那么偏U量必须满默认的对齐方式,W二、如果n于该变量的cd所占用的字节数Q那么偏U量为n的倍数Q不用满默认的寚w方式。结构的d也有个U束条gQ分下面两种情况Q如果n大于所有成员变量类型所占用的字节数Q那么结构的d必Mؓ(f)占用I间最大的变量占用的空间数的倍数Q?br />
否则必须为n的倍数。下面D例说明其用法?br />
#pragma pack(push) //保存寚w状?br />
#pragma pack(4)//讑֮?字节寚w
struct test
{
char m1;
double m4;
int m3;
};
#pragma pack(pop)//恢复寚w状?br />
以上l构的大ؓ(f)16Q下面分析其存储情况Q首先ؓ(f)m1分配I间Q其偏移量ؓ(f)0Q满x(chng)们自p定的寚w方式Q?字节寚wQ,m1占用1个字节。接着开始ؓ(f)m4分配I间Q这时其偏移量ؓ(f)1Q需要补?个字节,q样使偏U量满为n=4的倍数Q因为sizeof(double)大于nQ?m4占用8个字节。接着为m3分配I间Q这时其偏移量ؓ(f)12Q满ؓ(f)4的倍数Qm3占用4个字节。这时已lؓ(f)所有成员变量分配了(jin)I间Q共分配?6个字节,满为n的倍数。如果把上面?pragma pack(4)改ؓ(f)#pragma pack(16)Q那么我们可以得到结构的大小?4。(误者自己分析)(j)
2?sizeof用法ȝ
在VC中,sizeof有着许多的用法,而且很容易引起一些错误。下面根据sizeof后面的参数对sizeof的用法做个ȝ?br />
AQ?参数为数据类型或者ؓ(f)一般变量。例如sizeof(int),sizeof(long){等。这U情况要注意的是不同pȝpȝ或者不同编译器得到的结果可能是不同的。例如intcd?6位系l中?个字节,?2位系l中?个字节?br />
BQ?参数为数l或指针。下面D例说?
int a[50]; //sizeof(a)=4*50=200; 求数l所占的I间大小
int *a=new int[50];// sizeof(a)=4; aZ个指针,sizeof(a)是求指针
//的大??2位系l中Q当然是?个字节?br />
CQ?参数为结构或cRSizeof应用在类和结构的处理情况是相同的。但有两炚w要注意,W一、结构或者类中的?rn)态成员(sh)对结构或者类的大生媄(jing)响,因ؓ(f)?rn)态变量的存储位置与结构或者类的实例地址无关?br />
W二、没有成员变量的l构或类的大ؓ(f)1Q因为必M证结构或cȝ每一
个实例在内存?sh)都有唯一的地址?br />
下面举例说明Q?br />
Class Test{int a;static double c};//sizeof(Test)=4.
Test *s;//sizeof(s)=4,sZ个指针?br />
Class test1{ };//sizeof(test1)=1;
DQ?参数为其他。下面D例说明?br />
int func(char s[5]);
{
cout<
//数的参数在传递的时候系l处理ؓ(f)一个指针,所
//以sizeof(s)实际上ؓ(f)求指针的大小?br />
return 1;
}
sizeof(func(?234?)=4//因ؓ(f)func的返回类型ؓ(f)intQ所以相当于
//求sizeof(int).
以上为sizeof的基本用法,在实际的使用中要注意分析VC的分配变量的分配{略Q这L(fng)话可以避免一些错误?br />
]]>
int a;
public:
int b;
};
…?br />…?br />};
A aa, bb;
B c, d;
a.a = 10; a.b = 20;
copyclass(???);// aa拯到bb
?
copyclass(???);// c拯到d
return 0;
}
3在一个项目中Q你被分配到一个小dQ在一个字W串str中包含字W串str_aQ找出所有在字符串str中的str_aQ要求你架构q个功能块ƈ且给Z用说明,代码q行健壮q且性能为首要?br />
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1、while(*a++=*b++);
2、memcpy(&bb, &aa, sizeof(A));
memcpy(&d, &c, sizeof(B));
3、BOOL FindString(const char *srcQ?const char *str_a)
{
(tng) (tng) char *pStart=(char *)src;
(tng) (tng) if(NULL==pStart || NULL==str_a) return FALSE;
(tng) (tng) char *pCursor=pStart;
(tng) (tng) while(pCursor=strstr(pCursor, str_a))
(tng) {
(tng) (tng) (tng) (tng) printf("find (%s) at position %ld\r\n"), str_a, pCursor-pStart); (tng) (tng)
(tng) }
(tng) return TRUE; (tng)
}
]]>
{
/* 若串 S 中从W?/span> pos(S 的下?/span> 0 ?/span> pos<StrLength(S)) 个字W?/span>
起存在和?/span> T 相同的子Ԍ则称匚w成功Q返回第一?/span>
q样的子串在?/span> S 中的下标Q否则返?/span> -1 (tng) (tng) (tng) */
int i = pos, j = 0;
while ( S[i+j] != '\0'&& T[j] != '\0')
if ( S[i+j] == T[j] )
j ++; // l箋(hu)比较后一字符
else
{
i ++; j = 0;
//
重新开始新的一轮匹?/span>
}
if ( T[j] == '\0')
return i; // 匚w成功 (tng) (tng) q回下标
else
return -1; // ?/span> S ?/span> ( W?/span> pos 个字Wv ) 不存在和?/span> T 相同的子?/span>
}
// Index_BF
偶然发现的一个有用的windows api SetROP2(int nDrawMode)Q现在将我对该api的用的?j)得归纳如下Q?/p>
该函数的主要的作用是Ҏ(gu)nDrawMode讄的方式重新设定绘囄方式Q下面就不同的nDrawMode值具体解释绘图模式是如何改变的?/p>
首先nDrawMode的取值有以下的情况:(x)
/////////////////////////////////////////////////////////////////////////////////example/////////////////////////////////////////////////////////////////////////
(tng) (tng)ClientDC.SetROP2(R2_NOT);
(tng) (tng)ClientDC.MoveTo(m_PointOrigin);
(tng) (tng)ClientDC.LineTo(m_PointOld);
(tng) (tng)ClientDC.MoveTo(m_PointOrigin);
(tng) (tng)ClientDC.LineTo(point);
(tng) (tng)m_PointOld = point;
(tng) (tng)CView::OnMouseMove(nFlags, point);
///////////////////////////////////////////////////////////////////////////////////////end/////////////////////////////////////////////////////////////////////////
MQ上qapi的一个作用是在需要改变绘囄模式Ӟ不需要重新设|画W,只需要设|不同的l图的模式即可达到相应的目的?/p>
struct a
{
(tng)int b;
};
struct b
{
(tng) (tng) (tng) int a;
};
void main()
{
(tng)a A;
(tng)A.b = NULL;
(tng)A.b = 1;
(tng)
(tng)b a;
(tng)a.a = 3;
}
在C的环境下Q会(x)报错Q在C++的情况,q样的操作就是允许的?br />在C++的编译器中,允许结构体名作Z个变量名来对待?/p>