<b>C++语言底子-函数法则</b>[VC/C++编程]
本文“<b>C++语言底子-函数法则</b>[VC/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 <iostream.h>
2: #include <conio.h>
3: #pragma hdrstop
4:
5: int main(int argc,char **argv)
6: {
7:cout << "argv = "argc << end1;
8.for (int i=0;i<argc;i++)
9. cout << "Parameter " << i << ": " << argv[i]<< end1;
10. cout << end1 << "Press any key to continue...";
11: getch();
12: return 0;
13: }
将这个项目存为Argstest,然后不是单击Run按钮,而是挑选主菜单中的Project|Build All,这样只成立项目而不执路程序.项目建成后,挑选主菜单中的Run|Parameters,在RunParameters对话框RunParameters字段中输入下列内容:one two three "four five" six然后单击Run按钮,程序即用所指定的号令行参数运行.另一种办法是用下列号令行在DOS提醒下运路程序:argstest one two three "four five" six程序运行时,它会显示传入的变元数,然后列出每个变元.运行几次,每次供应差别号令行变元,注意产生的后果.
大大都程序中main()函数的返回值并不重要,因为普通不利用返回值.事实上,可以不要求main()函数返回数值.main()函数的情势有多种,下列声明均有效:main();int main();// same as above
int main(void); // same as above
int main(int argc,char** argv);
void main();
void main(int argc, char** argv);
还有更多的情势.假如不想利用号令行变元,则可以用第一种main()函数情势,其不取参数(括号内为空的)并返回一个int(不指按时返回缺省返回值).换句话说main()函数最基本的情势不取参数并返回一个int.
数组
任何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
以上是“<b>C++语言底子-函数法则</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |