程序员面试笔试宝典——读书笔记4、函数、数组、变量

来源:互联网 发布:微店与淘宝店的区别 编辑:程序博客网 时间:2024/05/21 16:58

八、函数

1、怎么样写一个接受可变参数的函数

C语言中支持函数调用的参数为变参形式,如printf()函数。实现一个变参函数add(),该函数实现多参数求和运算。代码没附。


2、函数指针和指针函数有什么区别

指针函数是带指针的函数,本质上是一个函数,函数的返回类型为某一类型的指针。其形式如下:

类型标识符   *函数名 (参数列表)

例如,int *f(x,y),它的意思是声明一个函数f(x,y),该函数返回类型为int 型指针。

而函数指针式指向函数的指针变量,即本质上是一个指针变量,表示的是一个指针,它指向的是一个函数。其形式如下:

类型标识符   *函数名(参数列表)

例如:int (*pf)(int    x),它的意思是声明一个函数指针,而pf = func 则是将func 函数的首地址赋值给指针。

引申:

a、数组指针/指针数组

数组指针就是指向数组的指针,它表示的是一个指针,它指向的是一个数组,它的重点是指针。

指针数组就是指针的数组,表示的是一个数组,它包含的元素是指针,它的重点是数组。

b、函数模板/模板函数

函数模板是对一批模样相同的函数的说明描述,它不是某一个具体的函数;

而模板函数则是将函数模板内的“数据类型参数”具体化后得到的重载函数(就是由模板而来的函数)

简单地说,函数模板是抽象的,而模板函数是具体的。


3、C++ 函数传递参数的方式有哪些

有值传递、指针传递、传引用、全局变量传递。


4、重载和覆盖有什么区别

重载是指函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。

覆盖是指派生类中存在重新定义基类的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体不同。


5、是否可以通过绝对内存地址进行参数赋值与函数调用

可以。


6、默认构造函数是否可以调用单参数构造函数

不可以。


7、C++ 中函数调用有哪几种方式


8、什么是可重入函数?C语言中如何写可重入函数

可重入函数是指能够被多个线程“同时”调用的函数,并且能够保证函数结果正确性的函数。

在C语言中编写可重入函数时,尽量不要使用全局变量或静态变量,如果使用了全局变量或静态变量,就需要特别注意对这类变量访问的互斥。一般采用以下几种措施来保证函数的可重入性:信号量机制、关调度机制、关中断机制等方式。

注意:不要调用不可重入函数,当调用了不可重入的函数时,会使该函数也变为不可重入函数。一般驱动函数都是不可重入函数,因此在编写驱动程序时一定要注意重入的问题。


九、数组

1、int a[2][2] = {{1},{2,3}}则 a[0][1] 的值是多少

0。


2、如何合法表示二维数组


3、a 是数组,(int *)(&a + 1) 表示什么意思


4、不是使用流程控制语句,如何打印出1~1000 的整数

使用宏定义;采用构造函数与静态变量结合的方式。


5、char str[1024];scanf("%s",str)是否安全

有越界的问题。


十、变量

1、全局变量和静态变量有什么异同

全局变量、静态局部变量和静态全局变量

区分:

a、从作用域来看:

全局变量作用域是整个程序,它只需要在一个源文件中定义,就可以作用于所有的源文件,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。若某一个局部重新定义了这个变量,则全局变量作用域是除了这个局部外的整个程序,它的生命期与程序生命期一样长。

静态局部变量具有局部的作用域只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

静态全局变量也具有全局作用域每次调用都会进行初始化。它与全局变量的区别在于如果程序包含多个文件的话,它的作用域仅限于定义它的文件里,不能作用于其他文件里。


也就是:全局变量的作用域是整个程序,所有 源文件可见;加static 变成静态全局变量作用于仅限于定义该变量的文件中;静态局部变量的作用域仅限于定义它的函数体中。


将局部变量改变为静态变量后改变了它的存储方式,即改变了它的生成期;把全局变量改变为静态变量后市改变了它的作用域,限制了它的适用范围。


全局变量、静态局部变量与静态全局变量都在静态存储区分配空间,而局部变量在栈上分配空间。

静态变量存储在静态存储区,它的生命期与程序生命期相同。


2、局部变量需要“避讳”全局变量吗

局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。

具体的区别:

a、全局变量的作用域为这个程序块,而局部变量的作用域为当前函数

b、内存存储方式不同,全局变量分配在全局数据区,后者分配在栈区

c、生命周期不同。全局变量随主程序创建而创建,随主程序销毁而销毁,局部变量在局部函数内部,甚至局部循环体等内部存在退出就不存在啦。

d、使用方式不同。通过声明后全局变量程序的各个部分都可以使用到,局部变量只能在局部使用。

注意:局部变量不可以赋值为同名全局变量


3、如何建立和理解非常复杂的声明

点击打开链接


4、变量定义与变量声明有什么区别

定义为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。

而声明是指向程序表明变量的类型和名字。可以多次声明。


5、不使用第三方变量,如何交换两个变量的值

a、算术法

a = a+b; b=a-b; a=a-b;

b、异或法

a=a^b; b=a^b; a=a^b


6、C与C++变量初始化有什么不同

在C语言中,只能用常数对全局变量和静态变量进行初始化,否则编译器会报错。

在C语言中,全局变量如果不初始化,默认为0。

在C语言中,静态变量和全局变量的分配内存空间和初始化是在编译阶段完成,而其他变量是在编译阶段进行内存空间分配、在程序运行时执行本函数时赋予初值的。


在C++中,全局对象、变量的初始化时独立的,而全局对象、变量的构造函数调用顺序是跟声明有一定关系的。


引申:C语言中各种变量的默认初始值

全局变量:数值型为0;字符型为NULL,即0;指针变量也被赋值为NULL

静态变量的情况与全局变量类似。

而非静态局部变量如果不显示初始化,那么其内容是不可预料的,将是随机数,很危险。

0 0