公司面试题

写出atoi(char * s)的实现

#include <iostream>
using namespace std;
int atoi_s(char *s)
{
    if(s == NULL)
        return 0;
    int sum =0;
    while(*s != '\0')
    {
        sum *= 10;
        sum += (*s++ -'0');
    }
    return sum;
}
int main()
{
    char *temp = "1234121";
    cout<<atoi_s(temp)<<endl;
    return 0;
}

判断下面的输出结果是多少?

#include <iostream>
using namespace std;
int main()
{
    int j,k,l,m;
    int i = (j=4,k = 8, l = 16, m = 32);
    cout<<i<<endl; 
    return 0;
}

全局变量、静态全局变量、静态局部变量和局部变量的区别

变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。

按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。

按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。

全局变量(外部变量)的声明之前再冠以static 就构成了静态的全局变量。或者用const,可以达到一样的效果。
全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。

这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。

static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。

通过静态全局变量,了解到了真正意义上的extern的含义,主要有两种方式:extern一个变量,或者一个函数,同时不需要include那个源文件!!!

解释堆和栈的区别

论述含参数的宏和函数的优缺点?

实现双链表删除一个节点p,在节点p后插入一个节点;
写一个函数,把其中的\t都换为四个空格;

windows程序的入口是哪里?写出windows消息传递机制的流程

如何定义和实现一个类的成员函数为回调函数?

c++里面是不是所有的动作都是main引起的?如果不是,举例说明

c++如何声明 const void f(void) 函数为c程序的库函数?

Inline函数在编译时是否做参数类型检查?

是的,inline函数在编译的时候,做类型检查~

内联函数是C++新增的特性.在C语言中是使用#define来做宏定义—-这也是内联代码的原始实现..而宏定义一般就是文本替换,不做参数类型检查,但是内联函数是需要进行检查的.而且 宏不能按值传递,内联函数是按值传递的

基础知识:

补码~
波兰表达式~
逆波兰表达式~
二维数组或者高维数组的实际存储方式~
内存计算~
多线程计算~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值