C/C++

二十六、       字符型数组,指针数组

       对char *p=”Hello;实际上p是一个指针,指向的内容是字符串常量Hello,指向的内容是不可修改的!如果执行*p+1=’F’操作是错误的!

       因为p是指针,可以让p指向别的内容,如p=“china”是正确的。

       char p[]=”Hello”;实际上是一个字符串数组初始化的方式,字符串数组有两种初始化方式,一种是这样的初始化,另外一种是列表初始化;

       而p可以理解为是一个常量指针,p的值不可修改,如p++操作是错误的。

二十七、       虚函数

       虚函数是在基类中作总体框架定义,定义时在函数zhi的返回类型名前加上virtual构成dao。它的具体不同实现版本是在其类的派生类里实现的。纯虚函数是在其类中连基本框架都定义不出来,所以只是用“virtual 类型名 函数名()=0;”的形式来声明基类中有这么一个函数,而它的实现则完全由基类的派生类根据不同需要来完成。

在C++中基类必须将它的两种成员函数区分开来:一种是基类希望其派生类进行覆盖的函数;另一种是基类希望派生类直接继承而不要改变的函数,对于前者通常定义为虚函数,当我们使用指针引用对虚函数的调用将被动态绑定,即根据所绑定的对象不同,所执行的函数不同,有可能是基类的,也有可能是派生类的。C++中多态就是通过虚函数来实现的。

       每个成员函数都包含一个特殊的指针,叫this指针,这里不同类中的虚函数(成员函数)指针不一样,故而区分。

二十八、       二维数组与数组指针

       例:在C语言中,若有定义:int a[4][10](其中a<=i<4,0<=j<10);则下列选项中对数组元素a[i][j]引用错误的是(A)

       A     *(a+i)+j

       B     *(&a[0][0]+10*i+j)

       C     *(a[i]+j)

       D     *(*(a+i)+j)

       解析:

       A是a[i][j]的地址,而D选项是在A的基础上再取*则是a[i][j]的值。

       B正确,a[0][0]取地址是数组第一个元素的地址,加上10*i为第i行第0个元素的地址,再加j是a[i][j]的地址,再取*是a[i][j]的值。

       C正确,a[i]是第i行第0个元素的值,加j后为a[i][j]的地址,再取*就是a[i][j]的值。

       对于二维数组,取一个*是为地址,取两个*就是指针所指向的值。

二十九、       ++,--例题

       例:若执行下面的程序时,从键盘上输入5,则输出是(6)。

       int main(int argc, char ** argv)

{

       int x;

       scanf(“%d”,&x);

       if(x++>5)

              printf(“%d\n”,x);

       else

              printf(“%d\n”,x--);

       return 0;

}

进行if判断时由于++在后所以先进行判断,然后++,不满足条件进入else,此时x++变为6。

进入else后由于--在后所以先打印,之后再--,打印出的x为6,然后x--变为5。

三十、    函数类型返回值基础知识

1、 返回值

C中:如果函数未指定返回值类型,则默认为int

C++中:如果一个函数没有返回值,返回值类型必须指定为void

2、 参数列表

C中:如果函数没有指定参数列表,则默认可以接受多个参数。

C++中:有严格的类型检测,没有参数列表的函数默认为void,不接受任意参数。

3、 缺省参数(即给参数一个默认值)

C:不支持。

C++:支持(如果没有指定实参则使用缺省值,有则使用指定参数)

1) 默认实参必须在参数列表的结尾

2) 默认参数只能出现在函数声明或者定义二选一中

3) 缺省值必须是常量或全局变量

4) 缺省参数必须是值传递或者常参传递

4、 函数重载

C:不支持

C++:支持在同一作用域中存在几个功能类似的同名函数,但参数列表(参数个数、类型、顺序)不同

5、 引用和指针

引用:可以看作是一个变量的别名

特点:

a)      必须初始化

b)      一个变量可以有多个引用

c)      引用一旦初始化,就不能再成为其他变量的引用(数组不能被引用)

引用与指针的异同:

       同:底层实现相同

       异:

a)    引用必须初始化

b)    引用一旦绑定就不能更改

c)    ++的结果不同

d)    有多级指针,没有多级引用

posted @ 2020-06-12 14:31  烟火流沙  阅读(119)  评论(0编辑  收藏  举报