??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲高清资源在线观看,亚洲欧美日韩国产综合精品二区 ,av电影在线播放高清免费观看http://www.aygfsteel.com/plpa/archive/2005/12/09/3375.html#23069喜爱站喜爱站Fri, 09 Dec 2005 01:39:00 GMThttp://www.aygfsteel.com/plpa/archive/2005/12/09/3375.html#23069

喜爱站 2005-12-09 09:39 发表评论
]]>
re: java applection 囑Ş界面应用http://www.aygfsteel.com/plpa/archive/2005/04/20/3376.html#3538力力力力力力Wed, 20 Apr 2005 06:52:00 GMThttp://www.aygfsteel.com/plpa/archive/2005/04/20/3376.html#3538
字写错了?要有点专业精嘛~~~~

力力力 2005-04-20 14:52 发表评论
]]>
re: sql 扩展http://www.aygfsteel.com/plpa/archive/2005/04/08/2983.html#2984噼里啪啦的世?/dc:creator>噼里啪啦的世?/author>Fri, 08 Apr 2005 01:23:00 GMThttp://www.aygfsteel.com/plpa/archive/2005/04/08/2983.html#2984作者:unknown 更新旉Q?005-03-17


Transact-SQL 语言使用的流E控制命令与常见的程序设计语acM主要有以下几U控制命令?

4.6.1 IF…ELSE
其语法如下:
IF <条g表达?gt;
<命o行或E序?gt;
[ELSE [条g表达式]
<命o行或E序?gt;]
其中<条g表达?gt;可以是各U表辑ּ的组合,但表辑ּ的值必L逻辑值“真”或“假”。ELSE子句是可选的Q最单的IF语句没有ELSE子句部分。IF…ELSE用来判断当某一条g成立时执行某D늨序,条g不成立时执行另一D늨序。如果不使用E序块,IF或ELSE只能执行一条命令。IF…ELSE可以q行嵌套?

?-9
declare@x int,@y int,@z int
select @x=1,@y=2, @z=3
if@x>@y
print'x>y' --打印字符?x>y'
else if@y>@z
print'y>z'
else print'z>y'
q行l果如下
z>y
注意Q在Transact-SQL中最多可嵌套32U?

4.6.2 BEGIN…END
其语法如下:
BEGIN
<命o行或E序?gt;
END
BEGIN…END用来讑֮一个程序块Q将在BEGIN…END内的所有程序视Z个单元执行BEGIN…ENDl常在条件语句,如IF…ELSE中用。在BEGIN…END中可嵌套另外的BEGIN…END来定义另一E序块?

4.6.3 CASE
CASE 命o有两U语句格?
CASE <q算?gt;
WHEN <q算?gt;THEN<q算?gt;
?
WHEN<q算?gt;THEN<q算?gt;
[ELSE<q算?gt;]
END

CASE
WHEN <条g表达?gt; THEN <q算?gt;
WHEN <条g表达?gt; THEN <q算?gt;
[ELSE <q算?gt;]
END
CASE命o可以嵌套到SQL命o中?
?-10Q调整员工工资,工作U别为?”的上调8%Q工作别ؓ?”的上调7%Q工作别ؓ?”的上调6%Q其它上?%?
use pangu
update employee
set e_wage =
case
when job_level = ??then e_wage*1.08
when job_level = ??then e_wage*1.07
when job_level = ??then e_wage*1.06
else e_wage*1.05
end
注意:执行CASE子句Ӟ只运行第一个匹配的子名?

4.6.4 WHILE…CONTINUE…BREAK
其语法如?
WHILE <条g表达?gt;
BEGIN
<命o行或E序?gt;
[BREAK]
[CONTINUE]
[命o行或E序块]
END
WHILE 命o在设定的条g成立时会重复执行命o行或E序块。CONTINUE命o可以让程序蟩qCONTINUE 命o之后的语句,回到WHILE 循环的第一行命令。BREAK 命o则让E序完全跛_循环Q结束WHILE 命o的执行。WHILE 语句也可以嵌套?

?-11:
declare @x int @y int @c int
?-11:
declare @x int, @y int, @c int
select @x = 1, @y=1
while @x < 3
begin
print @x --打印变量x 的?
while @y < 3
begin
select @c = 100*@ x+ @y
print @c --打印变量c 的?
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
q行l果如下
1
101
102
2
201
202

4.6.5 WAITFOR
其语法如?
WAITFOR {DELAY <‘时间?gt; | TIME <‘时间?gt;
| ERROREXIT | PROCESSEXIT | MIRROREXIT}
WAITFOR 命o用来暂时停止E序执行Q直到所讑֮的等待时间已q或所讑֮的时间已到才l箋往下执行。其中‘时间’必MؓDATETIME cd的数据,如:?1:15:27’,
但不能包括日期各关键字含义如下:


DELAY 用来讑֮{待的时间最多可?4 时Q?
TIME 用来讑֮{待l束的时间点Q?
ERROREXIT 直到处理非正怸断;
PROCESSEXIT 直到处理正常或非正常中断Q?
MIRROREXIT 直到镜像讑֤p|?
?-12 {待1 时2 分零3 U后才执行SELECT 语句
waitfor delay ?1:02:03?
select * from employee

?-13Q等到晚?1 炚w8 分后才执行SELECT 语句
waitfor time ?3:08:00?
select * from employee

4.6.6 GOTO
语法如下Q?
GOTO 标识W?
GOTO 命o用来改变E序执行的流E,使程序蟩到标有标识符的指定的E序行再l箋往下执行。作转目标的标识W可为数字与字符的组合,但必M“:”结,如?2Q’或‘a_1Q’。在GOTO 命o行,标识W后不必跟“:”?
?-14 分行打印字符?’、?’、?’、?’、??
declare @x int
select @x = 1
label_1
print @x
select @x = @x + 1
while @x < 6
goto label_1

4.6.7 RETURN
语法如下
RETURN [整数值]
RETURN 命o用于l束当前E序的执行,q回C一个调用它的程序或其它E序。在括号内可指定一个返回倹{?
?-15
declare @x int @y int
select @x = 1 @y = 2
if x>y
return 1
else
return 2
如果没有指定q回|SQL Server pȝ会根据程序执行的l果q回一个内定|?
?-5 所C?


如果q行q程产生了多个错误,SQL Serverpȝ返回绝对值最大的数|如果此时用户此时定义了返回|则以q回用户定义的倹{RETURN语句不能q回NULL倹{?






]]>
re: 我的java学习W记Q第一?回顾C/C++ 基本概念Q?/title><link>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2678</link><dc:creator>噼里啪啦的世?/dc:creator><author>噼里啪啦的世?/author><pubDate>Thu, 31 Mar 2005 22:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2678</guid><description><![CDATA[const主要是ؓ了程序的健壮?减少E序出错. <br>最基本的用? <br>const int a=100; b的内容不?b只能?00也就是声明一个intcd的常?#define b =100) <br>int const b=100; //和上面作用一? <br> <br>const指针和引用一般用在函数的参数?<br>int* m = &a; //出错,帔R只能用常指针 <br>int c= 1;const int*pc = &c;//常指针可指向帔R <br> <br>const int* pa = &a; //指针指向的内容ؓ帔R(是b的g? <br>int const *a = &b; //指针指向的内容ؓ帔R(是b的g?*p=3//error <br>int* const a = &b; //指针为常?不能更改指针了如 a++但可以改?p=3; <br> <br>从这可以看出const攑֜*左侧修饰的是指针的内?const攑֜*右侧修饰的是指针 <br>本n. <br> <br>const引用的用法和指针一?<br>int const & a=b; 和指针一?<br>const int& a=b; 和指针一?<br>但没?int& const a=b 的用法因为引用不能做UMq算Q但只是Zwarning <br> <br>const int* const a = &b; //l合应用,一般用来传递多l的数组 <br>cdQchar* init[] = {"Paris","in the","Spring"}; <br>void fun(const int* const a){} <br>fun(init)//保护参数不被修改 <br> <br>int A(int)const; //是常函数Q只能用在类中,调用它的对象不能Ҏ变成员?<br>const int A(); //q回的是帔R,所以必这么调?cosnt int a=A(); <br>int A(const int); //参数不能改?可用在Q意函?<br>int A(const int*); <br>.... <br>int height() const;//常函数只能由常函数调?<br>int max(int,int) const; <br>int Max = max(height(),height()); <br> <br>const int* pHeap = new int; <br>delete pHeap; <br>p = NULL;//出错 <br>我的解决办法是强制类型{?<br>const int* pHeap = new int(1); <br>delete (int*)pHeap; <br>pHeap = NULL; <br> <br>一、const 和引用联合用的时候要注意 <br> <br>const int a = 1; <br>const int& ref1 = a; <br>const int& ref2 = 1; <br> <br>ref1 ?ref2 都是正确的,但是他们引用的内容和一般的引用不同 <br>?const int& ref1 = a; 而言Q其实这?ref1 已经?a 没有M关系?<br>ref1 实际上是对一个旉的引用。同?const int& ref2 = 1; 也是?<br>一个旉做的引用。当引用临时量是 C++ 的隐式类型{换可以v作用?<br>临时量的生存期和引用量的生存期相同? <br> <br>二、强传const对象可能D无定义行? <br> <br>对于优化做的比较好的~译器,代码 const int i = 1; <br>当后面用到变?i 的时候,~译器会优化掉对 i 的存取,而直接用立x 1 <br> <br>const int i = 1; <br> <br>*(const_cast<int*>(&i)) = 2; <br>cout << *(int*)&i << endl; <br>cout << i << endl; <br> <br>所以,?const 对象?const_cast 可能D无定义行?<br>目前我就遇到q些问题Q那位还有补充的? <br> <br> <br> <br> <br> <br>能不能把自己的经验也谈谈。大家交交?<br>q个是我在调错时发现的 <br>int height() const;//常函数只能由常函数调?<br>int max(int,int) const; <br>int Max = max(height(),height()); <br> <br> <br> <br> <br> <br>Thinking again in C++Q一Q常量性原?cphjQ原作) <br>有些地方很受启发 <br> <br> <br>1.不能const修饰的Q何对象、引用和指针作ؓ赋D辑ּ的左倹{?<br>const int cx=100; <br>const int & rcx=cx; <br>const int * pcx=&cx; <br>cx=200; //error <br>rcx=200; //error <br>*pcx=200; //error <br> <br>2.constcd的对象不能直接被non-constcd的别名所引用?<br>(1)不能constcd的对象传递给non-constcd的引用?<br>const int cx=100; <br>int & rx=cx; //error <br>(2)不能constcd的实参传递给形参为non-constcd引用的函数?<br>void f(int a) <br>{ <br>} <br>void g(int & ra) <br>{ <br>} <br>const int cx=100; <br>f(cx); //ok <br>g(cx); //error <br>(3)不能constcd的对象作为non-constcd引用的函数返回倹{?<br>int & f(const int & rca) <br>{ <br>return rca; //error <br>} <br>int x=100; <br>f(x); <br> <br>3.可以使用constcd别名引用non-const对象。此旉过const引用不能修改对象Q但对象可以通过non-const引用被修攏V?<br>int x=100; <br>int & rx=x; <br>const int & rcx=x; //ok <br>x=200; <br>rx=200; <br>rcx=200; //error <br> <br>4.指针的属性有两个Q指针的cd和指针本w的帔R性。其中,指向const对象与指向non-const对象Q是不同的指针类型?<br>int x=100; <br>const int * pcx=&x; //[1] <br>int * px=&x; //[2] <br>int y=100; <br>int * const cpy=&y; //[3] <br>int * py=&y; //[4] <br>[1][2]两个指针的类型不同;[3][4]两个指针的常量性不同?<br>对象与指向对象的指针的规则类g对象与引用。即Qconstcd的对象不能直接被non-constcd的指针所指示Q同2Q;可以使用constcd的指针指向non-const对象Q同3Q? <br> <br>5.可以相同类型(包括帔R性)的const指针Dlnon-const指针?<br>int x=100; <br>int * px; <br>const int * pcx=&x; <br>px=pcx; //error <br>int * const cpx=&x; <br>px=cpx; //ok <br> <br>6.若函数的q回gؓ内徏cd或是指针Q则该返回D动成为const性质。但自定义类型则为non-const性质?<br>int f() //相当于返回const int <br>{ <br>return 100; <br>} <br>int * g(int & ra) //相当于返回int * const <br>{ <br>return &ra; <br>} <br>class CTest <br>{ <br>int n; <br>public: <br>CTest(int n){this->n=n;} <br>}; <br>CTest h() //q回的就是CTest <br>{ <br>return CTest(200); <br>} <br> <br>f()=200; //error <br> <br>int x=100; <br>int y=200; <br>int * px=&x; <br>g(y)=px; //error <br>*g(y)=x; //okQ从q点可以看出g()q回的不是const int * <br> <br>CTest t(100); <br>h()=t; //okQ但却是完全错误的、危险的做法 <br>//所以h()的正写法是q回const CTest <br> <br> <br> <br> <br> <br>const int b=100; b的内容不?b只能?00 <br>int const b=100; b必须为int?不能为其他类? <br>q?句话的意思应该是一L?Q?THINKING IN C++是这栯?<br> <br> <br> <br> <br> <br>const int a=100; a的内容不?a只能?00Q同样不能类型{换)?<br>int const b=100; b必须为int?不能为其他类?Q同样在使用中不能修改)?<br>所以a和b是一LQ称为整型常敎ͼ在用中不能被修改,当然都不能{为其他类型了? <br>#include <iostream> <br> <br>using namespace std; <br> <br>int main() <br>{ <br>  const int a = 100; <br>  int const b = 100; <br> <br>  a = 100; //q四条语句编译时都会出现“Cannot modify a const object <br>b = 100; //in function main()”的错误提示Q也是_M企图修改   a = 100.0; //a和bQ其实是一LQ的行ؓ都会出现“灾䏀,在语法上讲就  b = 100.0; //是a和b都不能出现在赋D句的左边Q? <br> <br>  cout<<'\n'<<a<<'\n'<<b<<endl; <br> <br>  return 0; <br>} <br> <br> <br> <br> <br> <br>常函数的调用是这LQ常量对象只能调用常成员函数Q非帔R对象卛_以调常成员函敎ͼ也可以调一般成员函敎ͼ但当某个函数有const和非const两个版本Ӟconst对象调const版本Q非const对象调非const版本 <br>例: <br>class A <br>{ <br>public: <br>int & GetData(){return data;} <br>const int & GetData()const {return data;} <br>private: <br>int data; <br>} <br>A a; <br>a.GetData();//调用int & GetData(){return data;} <br>//但如果没有这个函敎ͼ也可以调用const int & GetData()const <br>const A const_a; <br>const_a.GetData();//调用const int & GetData()const {return data;} <br>常函数只能调常函敎ͼ也是׃q个原因 <br> <br> <br> <br> <br> <br>你狠!加两?<br> <br>一、const 和引用联合用的时候要注意 <br> <br>const int a = 1; <br>const int& ref1 = a; <br>const int& ref2 = 1; <br> <br>ref1 ?ref2 都是正确的,但是他们引用的内容和一般的引用不同 <br>?const int& ref1 = a; 而言Q其实这?ref1 已经?a 没有M关系?<br>ref1 实际上是对一个旉的引用。同?const int& ref2 = 1; 也是?<br>一个旉做的引用。当引用临时量是 C++ 的隐式类型{换可以v作用?<br>临时量的生存期和引用量的生存期相同? <br> <br>二、强传const对象可能D无定义行? <br> <br>对于优化做的比较好的~译器,代码 const int i = 1; <br>当后面用到变?i 的时候,~译器会优化掉对 i 的存取,而直接用立x 1 <br> <br>const int i = 1; <br> <br>*(const_cast<int*>(&i)) = 2; <br>cout << *(int*)&i << endl; <br>cout << i << endl; <br> <br>所以,?const 对象?const_cast 可能D无定义行?<br> <br> <br> <br> <br> <br>#include <iostream.h> <br>void fun(char b){cout <<"void"<<endl;} <br>int fun(int const b){cout <<"int"<<endl;} <br>int main() <br>{ <br>fun(1.0);//详细看看重蝲函数? <br>fun(4); //想一惌用哪一? <br> <br>return 0; <br>} <br>我试了一下,会出? vc_'fun':ambiguous call to overloaded function <br> <br> <br> <br> <br> <br>补充的好啊,q个一般不会注意的 <br>const int i = 1; <br>*(const_cast<int*>(&i)) = 2; <br>cout << *(int*)&i << endl; <br>cout << i << endl; <br>q个可真有意思,调试时两个都?Q可~译是2Q??<br>const的永q都是const,q样能更改就不错了,不然p相矛盾了 <br>奇怪的?pi ?&i地址一样啊Q就像楼上说的这是编译时的优?<br>处理 <br>const int i = 1; <br>int* pi=const_cast<int*>(&i); <br>*pi=2; <br>cout << *pi << endl; <br>cout << i << endl; <br> <br> <br> <br> <br> <br>那个主要是隐式{?<br>你可依次把两个函数注掉看看调?<br>#include <iostream.h> <br>//void fun(char b){cout <<"void"<<endl;} <br>void fun(int b){cout <<"int"<<endl;} <br>int main() <br>{ <br>fun('a'); <br>fun(4); <br>return 0; <br>} <br> <br> <br><img src ="http://www.aygfsteel.com/plpa/aggbug/2678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/plpa/" target="_blank">噼里啪啦的世?/a> 2005-04-01 06:53 <a href="http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2678#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 我的java学习W记Q第一?回顾C/C++ 基本概念Q?/title><link>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2677</link><dc:creator>噼里啪啦的世?/dc:creator><author>噼里啪啦的世?/author><pubDate>Thu, 31 Mar 2005 22:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2677</guid><description><![CDATA[帔R定义规则 <br>【规?-3-1】需要对外公开的常量放在头文g中,不需要对外公开的常量放在定义文件的头部。ؓ便于理Q可以把不同模块的常量集中存攑֜一个公q头文件中?<br>【规?-3-2】如果某一帔R与其它常量密切相养I应在定义中包含这U关p,而不应给Z些孤立的倹{?<br>例如Q?<br>const float RADIUS = 100; <br>const float DIAMETER = RADIUS * 2; <br>cM的常?<br>有时我们希望某些帔R只在cM有效。由?define定义的宏帔R是全局的,不能辑ֈ目的Q于是想当然地觉得应该用const修饰数据成员来实现。const数据成员的确是存在的Q但其含义却不是我们所期望的。const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因ؓcd以创建多个对象,不同的对象其const数据成员的值可以不同?<br> 不能在类声明中初始化const数据成员。以下用法是错误的,因ؓcȝ对象未被创徏Ӟ~译器不知道SIZE的值是什么?<br> class A <br> {?<br> const int SIZE = 100; // 错误Q企囑֜cd明中初始化const数据成员 <br> int array[SIZE]; // 错误Q未知的SIZE <br> }; <br> <br>const数据成员的初始化只能在类构造函数的初始化表中进行,例如 <br> class A <br> {?<br> A(int size); // 构造函?<br> const int SIZE ; <br> }; <br> A::A(int size) : SIZE(size) // 构造函数的初始化表 <br> { <br> ?<br> } <br> A a(100); // 对象 a 的SIZEgؓ100 <br> A b(200); // 对象 b 的SIZEgؓ200 <br> <br> 怎样才能建立在整个类中都恒定的常量呢Q别指望const数据成员了,应该用类中的枚D帔R来实现。例?<br> class A <br> {?<br> enum { SIZE1 = 100, SIZE2 = 200}; // 枚D帔R <br> int array1[SIZE1]; <br> int array2[SIZE2]; <br> }; <br> 枚D帔R不会占用对象的存储空_它们在编译时被全部求倹{枚丑ָ量的~点是:它的隐含数据cd是整敎ͼ其最大值有限,且不能表CQҎQ如PI=3.14159Q?<br> <br><img src ="http://www.aygfsteel.com/plpa/aggbug/2677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/plpa/" target="_blank">噼里啪啦的世?/a> 2005-04-01 06:52 <a href="http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2677#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 我的java学习W记Q第一?回顾C/C++ 基本概念Q?/title><link>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2676</link><dc:creator>噼里啪啦的世?/dc:creator><author>噼里啪啦的世?/author><pubDate>Thu, 31 Mar 2005 22:50:00 GMT</pubDate><guid>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2676</guid><description><![CDATA[ <br>帔R <br> 帔R是一U标识符Q它的值在q行期间恒定不变。C语言?#define来定义常量(UCؓ宏常量)。C++ 语言除了 #define外还可以用const来定义常量(UCؓconst帔RQ?<br>Z么需要常? <br>如果不用常量,直接在程序中填写数字或字W串Q将会有什么麻烦? <br>Q?Q?E序的可L(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表CZ么?<br>Q?Q?在程序的很多地方输入同样的数字或字符Ԍ难保不发生书写错误?<br>Q?Q?如果要修Ҏ字或字符Ԍ则会在很多地Ҏ动,既麻烦又Ҏ出错?<br> <br>【规?-1-1?量使用含义直观的常量来表示那些在E序中多ơ出现的数字或字W串?<br>例如Q?<br> #define MAX 100 /* C语言的宏帔R */ <br>const int MAX = 100; // C++ 语言的const帔R <br>const float PI = 3.14159; // C++ 语言的const帔R <br> const ?#define的比?<br> C++ 语言可以用const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点: <br>Q?Q?const帔R有数据类型,而宏帔R没有数据cd。编译器可以对前者进行类型安全检查。而对后者只q行字符替换Q没有类型安全检查,q且在字W替换可能会产生意料不到的错误(辚w效应Q?<br>Q?Q?有些集成化的调试工具可以对const帔Rq行调试Q但是不能对宏常量进行调试?<br> <br>【规?-2-1】在C++ E序中只使用const帔R而不使用宏常量,即const帔R完全取代宏常量?<br> <br> <br> <br><img src ="http://www.aygfsteel.com/plpa/aggbug/2676.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/plpa/" target="_blank">噼里啪啦的世?/a> 2005-04-01 06:50 <a href="http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2676#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 我的java学习W记Q第一?回顾C/C++ 基本概念Q?/title><link>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2675</link><dc:creator>噼里啪啦的世?/dc:creator><author>噼里啪啦的世?/author><pubDate>Thu, 31 Mar 2005 22:49:00 GMT</pubDate><guid>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2675</guid><description><![CDATA[一、typedef的用?<br> <br>____在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言~译q程的一部分Q但它ƈ不实际分配内存空_实例像: <br> <br>typedef int INT; <br>typedef int ARRAY[10]; <br>typedef (int*) pINT; <br> <br>____typedef可以增强E序的可L,以及标识W的灉|性,但它也有“非直观性”等~点?<br> <br>二?define的用?<br> <br>____#defineZ宏定义语句,通常用它来定义常?包括无参量与带参?Q以及用来实现那些“表面似和善、背后一长串”的宏,它本wƈ不在~译q程中进行,而是在这之前(预处理过E?已l完成了Q但也因此难以发现潜在的错误及其它代码维护问题,它的实例像: <br> <br>#define INT int <br>#define TRUE 1 <br>#define Add(a,b) ((a)+(b)); <br>#define Loop_10 for (int i=0; i<10; i++) <br> <br>____在Scott Meyer的Effective C++一书的条款1中有关于#define语句弊端的分析,以及好的替代ҎQ大家可参看?<br> <br>三、typedef?define的区?<br> <br>____从以上的概念便也能基本清楚,typedef只是Z增加可读性而ؓ标识W另L新名U?仅仅只是个别?Q?define原本在C中是Z定义帔RQ到了C++Qconst、enum、inline的出C它也渐渐成ؓ了v别名的工兗有时很Ҏ搞不清楚与typedef两者到底该用哪个好Q如#define INT intq样的语句,用typedef一样可以完成,用哪个好呢?我主张用typedefQ因为在早期的许多C~译器中q条语句是非法的Q只是现今的~译器又做了扩充。ؓ了尽可能地兼容,一般都遵@#define定义“可诠Z的帔R以及一些宏语句的Q务,而typedef则常用来定义关键字、冗长的cd的别名?<br> <br>____宏定义只是简单的字符串代?原地扩展)Q而typedef则不是原地扩展,它的新名字具有一定的装性,以致于新命名的标识符h更易定义变量的功能。请看上面第一大点代码的第三行Q?<br> <br>typedef (int*) pINT; <br>以及下面q行: <br>#define pINT2 int* <br> <br>____效果相同Q实则不同!实践中见差别QpINT a,b;的效果同int *a; int *b;表示定义了两个整型指针变量。而pINT2 a,b;的效果同int *a, b;表示定义了一个整型指针变量a和整型变量b?<br> <br>____注意Q两者还有一个行?L区别哦! <br><img src ="http://www.aygfsteel.com/plpa/aggbug/2675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/plpa/" target="_blank">噼里啪啦的世?/a> 2005-04-01 06:49 <a href="http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2675#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 我的java学习W记Q第一?回顾C/C++ 基本概念Q?/title><link>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2674</link><dc:creator>噼里啪啦的世?/dc:creator><author>噼里啪啦的世?/author><pubDate>Thu, 31 Mar 2005 22:45:00 GMT</pubDate><guid>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2674</guid><description><![CDATA[问题Qconst变量 & 帔R <br> <br>  Z么我象下面的例子一L一个const变量来初始化数组QANSI C的编译器会报告一个错误呢Q?<br> <br>  const int n = 5; <br> <br>  int a[n]; <br> <br>  {案与分? <br> <br>  1)、这个问题讨论的是“常量”与“只d量”的区别。常量肯定是只读的,例如5Q?“abc”,{,肯定是只ȝQ因为程序中Ҏ没有地方存放它的|当然也就不能够去修改它。而“只d量”则是在内存中开辟一个地Ҏ存放它的|只不q这个值由~译器限定不允许被修攏VC语言关键字const是用来限定一个变量不允许被改变的修饰W?Qualifier)。上qC码中变量n被修Cؓ只读变量Q可惜再怎么修饰也不是常量。而ANSI C规定数组定义时维度必L“常量”,“只d量”也是不可以的?<br> <br>  2)、注意:在ANSI C中,q种写法是错误的Q因为数l的大小应该是个帔RQ而const int n,n只是一个变?帔R != 不可变的变量Q但在标准C++中,q样定义的是一个常量,q种写法是对?Q实际上Q根据编译过E及内存分配来看Q这U用法本来就应该是合理的Q只是ANSI CҎl的规定限制了它?<br> <br>  3)、那么,在ANSI C 语言中用什么来定义帔R呢?{案是enumcd?define宏,q两个都可以用来定义帔R? <br> <br>  问题Qconst变量 & const 限定的内?<br> <br>  下面的代码编译器会报一个错误,请问Q哪一个语句是错误的呢Q?<br> <br>  typedef char * pStr; <br> <br>  char string[4] = "abc"; <br> <br>  const char *p1 = string; <br> <br>  const pStr p2 = string; <br> <br>  p1++; <br> <br>  p2++; <br> <br>  {案与分析: <br> <br>  问题出在p2++上?<br> <br>  1)、const使用的基本Ş式: const char m; <br> <br>  限定m不可变?<br> <br>  2)、替?式中的m, const char *pm; <br> <br>  限定*pm不可变,当然pm是可变的Q因此问题中p1++是对的?<br> <br>  3)、替?式char, const newType m; <br> <br>  限定m不可变,问题中的charptr是一U新cdQ因此问题中p2不可变,p2++是错误的?<br> <br>  问题Qconst变量 & 字符串常?<br> <br>  请问下面的代码有什么问题? <br> <br>  char *p = "i'm hungry!"; <br> <br>  p[0]= 'I'; <br> <br>  {案与分析: <br> <br>  上面的代码可能会造成内存的非法写操作。分析如下, “i'm hungry”实质上是字W串帔RQ而常量往往被编译器攑֜只读的内存区Q不可写。p初始指向q个只读的内存区Q而p[0] = 'I'则企囑֎写这个地方,~译器当然不会答应?<br> <br>  问题Qconst变量 & 字符串常? <br> <br>  请问char a[3] = "abc" 合法吗?使用它有什么隐患? <br> <br>  {案与分析: <br> <br>  在标准C中这是合法的Q但是它的生存环境非常狭;它定义一个大ؓ3的数l,初始化ؓ“abc”,Q注意,它没有通常的字W串l止W?\0'Q因此这个数l只是看h像C语言中的字符Ԍ实质上却不是Q因此所有对字符串进行处理的函数Q比如strcpy、printf{,都不能够被用在q个假字W串上?<br> <br>  问题Qconst & 指针 <br> <br>  cd声明中const用来修饰一个常量,有如下两U写法,那么Q请问,下面分别用const限定不可变的内容是什? <br> <br>  1)、const在前?<br> <br>  const int nValueQ?//nValue是const <br> <br>  const char *pContent; //*pContent是const, pContent可变 <br> <br>  const (char *) pContent;//pContent是const,*pContent可变 <br> <br>  char* const pContent; //pContent是const,*pContent可变 <br> <br>  const char* const pContent; //pContent?pContent都是const <br> <br>  2)、const在后面,与上面的声明对等 <br> <br>  int const nValueQ?// nValue是const <br> <br>  char const * pContent;// *pContent是const, pContent可变 <br> <br>  (char *) const pContent;//pContent是const,*pContent可变 <br> <br>  char* const pContent;// pContent是const,*pContent可变 <br> <br>  char const* const pContent;// pContent?pContent都是const <br> <br>  {案与分析: <br> <br>  const和指针一起用是C语言中一个很常见的困惑之处,在实际开发中Q特别是在看别h代码的时候,常常会因栯不好判断作者的意图Q下面讲一下我的判断原则: <br> <br>  沿着*号划一条线Qconst和谁在一边,那么谁就是constQ即const限定的元素就是它。你可以Ҏq个规则来看上面声明的实际意义,怿定会一目了然?<br> <br>  另外Q需要注意:对于const (char *) ; 因ؓchar *是一个整体,相当于一个类??char)Q因此,q是限定指针是const? <br> <br><img src ="http://www.aygfsteel.com/plpa/aggbug/2674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/plpa/" target="_blank">噼里啪啦的世?/a> 2005-04-01 06:45 <a href="http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2674#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank">ī񹤿</a>| <a href="http://" target="_blank">ͼ</a>| <a href="http://" target="_blank">ͼ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">ػ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">봨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">̽</a>| <a href="http://" target="_blank">ͻȪ</a>| <a href="http://" target="_blank">ʹ</a>| <a href="http://" target="_blank">̩</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>