[收集] 经典C/C++面试题(四)

1、局部变量能否和全局变量重名?
     能,局部会屏蔽全局。要用全局变量,需要使用"::"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

2、如何引用一个已经定义过的全局变量?
     extern
     可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
    可以,在不同的C文件中以static形式来声明同名全局变量。
    可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

4、语句for( ;1 ;)有什么问题?它是什么意思?
    无限循环,和while(1)相同。

5、do……while和while……do有什么区别?
    前一个循环一遍再判断,后一个判断以后再循环。

6、请写出下列代码的输出内容
#include<stdio.h>
main()
{
    int a,b,c,d;
    a=10;
    b=a++;
    c=++a;
    d=10*a++;
    printf("b,c,d:%d,%d,%d",b,c,d);
    return 0;
}
答:10,12,120

7、请找出下面代码中的所以错误
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

#include "string.h"
main()
{
    char*src="hello,world";
    char* dest=NULL;
    int len=strlen(src);
    dest=(char*)malloc(len);
    char* d=dest;
    char* s=src[len];
    while(len--!=0) 
        d++=s--;
    printf("%s",dest);
    return 0;
}
答:
方法1:
int main()
{
    char* src = "hello,world";
    int len = strlen(src);
    char* dest = (char*)malloc(len+1);//要为\0分配一个空间
    char* d = dest;
    char* s = &src[len-1];//指向最后一个字符
    while( len-- != 0 )
        *d++=*s--;
    *d = 0;//尾部要加\0
    printf("%s\n",dest);
    free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
    return 0;
}
方法2:
#include <stdio.h>
#include <string.h>
main()
{
    char str[]="hello,world";
    int len=strlen(str);
    char t;
    for(int i=0; i<len/2; i++)
    {
        t=str[i]; 
        str[i]=str[len-i-1]; str[len-i-1]=t;
    }
    printf("%s",str);
    return 0;
}

8、-1,2,7,28,,126请问28和126中间那个数是什么?为什么?
    答案应该是4^3-1=63
    规律是n^3-1(当n为偶数0,2,4)
            n^3+1(当n为奇数1,3,5)
    答案:63

9、用两个栈实现一个队列的功能?要求给出算法和思路!
    设2个栈为A,B, 一开始均为空.

    入队:
    将新元素push入栈A;

    出队:
    (1)判断栈B是否为空;
    (2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;
    (3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O(1), 比上面的几种方法要好。

10、在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么?
    函数名: atol 
    功 能: 把字符串转换成长整型数 
    用 法: long atol(const char *nptr); 
    程序例: 
    #include <stdlib.h> 
    #include <stdio.h> 
    int main(void) 
    { 
        long l; 
        char *str = "98765432";

        l = atol(lstr); 
        printf("string = %s integer = %ld\n", str, l); 
        return(0); 
    }

11、对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?
    c用宏定义,c++用inline

12、直接链接两个信令点的一组链路称作什么?
    PPP点到点连接

13、接入网用的是什么接口?

14、voip都用了那些协议?

15、软件测试都有那些种类?
    黑盒:针对系统功能的测试    白合:测试函数功能,各函数接口

16、确定模块的功能和模块的接口是在软件设计的那个队段完成的?
    概要设计阶段

17、enum string
    {
        x1,
        x2,
        x3=10,
        x4,
        x5,
    }x;
   问x= 0x801005,0x8010f4;

18、unsigned char *p1;
      unsigned long *p2;
      p1=(unsigned char *)0x801000;
      p2=(unsigned long *)0x810000;
      请问p1+5=  0x801005;
            p2+5=  0x801014;

posted on 2008-06-19 16:41  高血压的熊  阅读(4568)  评论(0编辑  收藏  举报