C++语言基本-函数法则
· 函数可以取任意多个参数或不取参数。
· 函数可以返回一个值,但函数不强求返回一个值。
· 假如函数返回void范例,则不能返回数值。
假如要让返回void范例的函数返回数值,则会产生编译错误。返回void范例的函数不需包括return语句,但也可以包括这个语句。假如没有return语句,则函数达到末端的竣事大括号时自动返回。
· 假如函数原型暗示函数返回数值,则函数体中应包括返回数值的return语句,假如函数不返回数值,则会产生编译错误。
· 函数可以取任意多个参数,但只能返回一个数值。
· 变量可以按数值、指针或引用通报给函数(将在稍后先容)。
语法:函数语句的声明(原型)名目如下: ret_type function_name(argtype_1 arg_1,argtype_2 arg_2,…,argtype_n arg_n);
函数声明暗示代码中要包罗的函数,该当显示函数的返回数据范例(ret_type)和函数名(function_name),暗示函数所要数据变元的顺序(arg_1,arg_2,…,arg_n)和范例(argtype_1,argtype_2,…argtype_n)。
函数语句的界说名目如下:
ret_type function_name(argtype_1 arg_1,argtype_2 arg_2,…,argtype_narg_n);
{ statements;
return ret_type; }
函数界说暗示组成函数的代码块(statements),该当显示函数的返回数据范例(ret type)和函数名(function_name),包罗函数所要数据变元(arg_1,arg_2,…,arg_n)和范例(argtype_1,argtype_2,…argtype_n)。
main()函数
C++措施必需有main()函数。main()函数是措施的进口点。前面先容的每个样本措施都有main()函数。可是,并非所有C++措施都有传统的main()函数。用C或C++写成的Windows措施进口点函数称为WinMain(),而不是传统的main()函数。说明 C++ Builder GUI应用措施有WinMain(),但埋没起来了。C++ Builder利用户无需思量Windows措施的初级细节,而可以会合思量措施用户界面和其它部门的建设。main()函数和其它函数一样是函数,有沟通的组成部门。在32位节制台应用措施中,C++ Builder生成具有下列原型的缺省main()函数:int main(int argc,char** argv);这个main()函数形式取两个参数并返回一个整型值。前面说过,数值在挪用函数时通报给函数。但对付main()函数,没有直接挪用,而是在措施运行时自动执行。那么,main()函数如何取得参数呢?步伐是从呼吁行取得。现说明如下:假设有个Win32节制台应用措施要在DOS提示下用下列呼吁行执行:grep WM_KILLFOCUS 杁 -i
这里要用呼吁行变元WM_KILLFOCUS、d和i启动措施grep,我们要演示如安在main()函数中将其变为argc和argv.首先,整型变量argc包括呼吁行中通报的参数个数,至少为1,因为措施名也算作参数。变量argv是个数组,包括字串的指针。这个数组包括呼吁行中通报的每个字串。本例中:
argc包括4
argv[0] 包括C:|cbuilder|bin|grep.exe
argv[1] 包括WM_KILLFOCUS
argv[2] 包括 d
argv[3] 包括 i
下面用一个小措施验证这个事实。在C++ Builder中生成新的节制台应用措施并输入清单1.5所示的措施。清单1.5Argstest.cpp
1: #include
#p#分页标题#e#
数组
任何C++固有数据范例都可以放进数组中。数组(array)就是数值的荟萃。譬喻,假设要生存一个整型数组,放五个整型值。可以声明数组如下:int myArray[5];这里编译器为数组分派图1.7所示的内存空间。由于每个int要4个字节存储,所以整个数组占用20字节的内存空间。
mArray[0]mArray[1]mArray[2]mArray[3]
mArray[4]
baseAddrbasseAddr+4baseAddr+8
baseAddr+12baseAddr+16
声明数组后,就可以用如下脚标操纵符([])填入数值:
myArray[0] = -200;
myArray[1] = -100;
myArray[2] = 0;
myArray[3] = 100;
myArray[4] = 200;
由上可见,C++中的数组是以0为基数的。后头措施中可以用脚标操纵符会见数组的各个元素:
int result=myarray[3]+myArray[4]; // result will be 300
尚有一次声明和填入整个数组内容的简便要领如下:
int myArray[5] = {-200, -100,0,100,200};
进一步说,假如知道数组的元素个数,并在声明数组时填凑数组,则声明数组时连数组长度都可以省略。譬喻:int myArray[] = {-200, -100,0,100,200 };这是可行的,因为编译器从赋予的数值表可以判定出数组中元素的个数和分派给数组的内存空间。
数组可以是多维的。为了生成两维整型数组,可用下列代码:
int mdArray[3][5];
这样就分派15个int空间(共60字节)。数组的元素可以和一维数组一样会见,只是要提供两个脚标操纵符:int x = mdArray[1][1]+mdArray[2][1];
图1.8两维数组在内存中的样子告诫 留意不要重载数组末端。
C++一个强大的特性是能直接会见内存。由于这个特性,C++无法阻止你写入特定内存地点,纵然这个地点是措施不让会见的。下列代码是正当的,但会导致措施或Windows瓦解:int array[5];array[5]=10;这是常见的错误,因为数组是以0为基数的,最大脚标应是4而不是5。假如重载数组末端,则无法知道哪个内存被改写了,使功效难以预料,甚至会导致措施或Windows瓦解。这类问题很难诊断,因为受影响的内存凡是要在好久今后才会见,这时才产生瓦解(让你莫名个中之妙)。所以写入数组时必然要小心。
数组法则
·数组是以0为基数。数组中的第一个元素为0,第二个元素为1,第三个元素为2,等等。
·数组长度应为编译常量。编译器在编译时必需知道为数组分派几多内存空间。不能用变量指定命组长度。所以下列代码不正当,会导致编译错误:
int x = 10;int myArray[x]; // compiler error here·
小心不要重载数组末端。
· 大数组从堆叠(heap)而不是仓库(stack)中分派(详见稍后)。· 从堆叠分派的数组可以用变量指定命组长度。譬喻:int x = 10;int* myArray = new int[x]; // this is OK