探寻C语言/C++培训中常见问题

2013/7/23 9:19:00  人气 466    怀旧国机论坛  
直击深圳达内科技C语言/C++培训CSD1303班,C++课程已经讲到过半了,此时,老师为大家总结了C语言/C++培训中常见问题。通过掌握这些常见问题来加深学员对C++知识的理解,提高程序编程效率,减少出错率。
1、c++变量初始化规则   内置类型变量是否初始化决定于变量的定义位置,在函数体外定义的变量都自动初始化为0,函数体内定义的变量都不进行自动初始化。类类型变量的初始化,类通过定义一个或多个构造函数来控制类对对象的初始化,如果定义某个类的变量时没有提供初始化式,这个类就通过默认构造函数来实现。
2、引用(reference)与指针(pointer)   引用就是对象的另一个名字,通过在变量前添加&符号来定义。定义时必须初始化:  int ival=1024;  int &refval= ival;/:refval refers to ival  int &refval;//error:a reference must be initialized  int &refval=1024;//error:initializer must be an object  作用在引用上的操作与作用在对象上的操作完全等价,当引用初始化后,只要改引用存在就绑定到初始化时指向的对象,不可更改。  const reference是指向const对象的引用,利用该引用可以读取但不可以修改其所指向的对象,普通引用不能指向const对象。  指针用于指向对象,其值是所指向对象在内从中的地址,通过在变量前加*来定义:  string *pstr,ppstr;//pstr is a pointer to string,ppstr is a string  用指针操作内存容易发生越界错误,故定义指针后建议立即进行初始化,对指针的初始化或者赋值仅能使用以下的四种类型值:0值常量表达式;类型匹配对象的地址;同一对象的下一地址;同类型的另一有效指针。 c++提供了一种特殊的指针void*,它可以保存任何类型对象的地址。
3、指针和const限定符   指向const对象的指针,定义是不需要进行初始化,通过改指针可以反问但不可以修改该对象。const对象必须使用const类型指针去指向。  const double pi=3.1415926;  const double *ptr=π//ptr is a pointer to a const  const指针是一种常量,本身值不能修改,定义时必须进行初始化,eg:  double pi = 3.1415926;  double *const prt=π//ptr is a const pointer  指向const对象的const指针这种类型的指针本身值不能改变,通过它也只能访问所指对象不能修改对象的值。eg:  const double pi=3.1415926;  const double *const ptr=π//ptr is a const pointer to a const object
4、指针和typedef   借用一个例子来说明这个问题,eg:  typedef string *pstring;  const pstring cstr;  大多说人会认为cstr是个const string*(原式等价于 const string *cstr)类型,但这是错误的,原因在于将typedef当成了文本扩展。申明const pstring时,const修饰的是pstring类型,这是一个指针,所以应该将其理解为cstr定义为指向string类型的一个const指针,等价于:string *const cstr;
5、c++中的特殊数据类型string的长度string::size_type  中元素的个数vector::size_type  数组中元素个数:size_t  两个指针之间的距离度量:ptrdiff_t
6、多维数组   多维数组其实质就是数组中的数组,eg:  int ia[3][4];//arry of size3,eachelement is an arry of ints of size 4  int (*ip)[4] = ia;//ip points to an arry of 4 ints  int *ip[4];// arry of pointer to int
7、c++中的p++与++p的效率问题   我们在c++中一般使用前置操作符,因为前置操作效率更高,仅需加1后返回加1的结构即可;而后置操作符必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。  *beg++;等价于*beg;++beg;
8、函数参数问题   const形参可以避免复制操作  当数组作为函数参数时,编译器只会检查实参是否是指针,指针的类型是否与形参形参匹配,而不检查数组长度。在传递数组时,实参是指向数组第一个元素的指针,形参复制的是这个指针的值。  通过引用传递数组时,实参要求与形参类型大小完全匹配。  二维数组做参数:void printArray(int(arr*)[10],int rowSize);
9、函数指针   返回指向函数的指针,eg:int (*ff(int))(int*,int);解释如下:ff是一个带有int型的函数,该函数返回指向函数的指针,该指针指向的函数类型是int(*) (int*,int);即所指向的函数返回int型,并带有两个形参。使用typedef定义更加简明易懂:  typedef int(*PF)(int*,int);  PF ff(int); 已经掌握理解了的,你可以做点练习,加以巩固,还不是很熟悉的可以加强一下,这些都是C语言/C++很常见的问题,熟记对大家百利无一害。

. [iframe=200*200]http://url.cn/FLfTXA[/iframe]

发表回复

   


  通知楼主

沙发

绝对亡人`.07-23 09:50
你的意见,是河南最大的支持!

回复只看TA