原文地址:华为C/C++笔试题 作者:flychenxu
O(n2)
9、写出float与零值的比较
#define EPSION 0.000001
double x;
if (x >= -EPSION && x <= EPSION)
10、Internet采用哪种网络协议?该协议的主要层次结构?
TCP/IP,分为:物理层,数据链路层,网络层,传输层,应用层。
11、Internet中物理地址与网络地址的转换?
ARP协议:IP地址到物理地址的转换;
RARP协议:物理地址到IP地址的转换,用于无盘工作站。
12、IP地址编码分为哪两部分?
网络号和主机号
13、不能做switch参数类型的是:实型。
14、某32位系统,C++程序如下,计算sizeof
#include <stdio.h>
#include <malloc.h>
void Foo ( char str[100] )
{
printf("sizeof(str)=%d \n", sizeof(str) );
}
main()
{
char str[] = "www.ibegroup.com";
char *p1 = str ;
int n = 10;
void *p2 = malloc( 100 );
printf("sizeof(str)=%d \n", sizeof(str) );
printf("sizeof(p1)=%d \n", sizeof(p1) );
printf("sizeof(n)=%d \n", sizeof(n) );
printf("sizeof(p2)=%d \n", sizeof(p2) );
Foo(str);
}
防止头文件被重复引用
对于#include <filename.h> ,编译器从标准库路径开始搜索filename.h
对于#include "filename.h" ,编译器从用户的工作路径开始搜索filename.h
(1) 请问运行Test 函数会有什么样的结果?
Void GetMemory(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
答:输出“hello”
(2) 请问运行Test 函数会有什么样的结果?
void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
}
答:输出“world”
(3) 请问运行Test 函数会有什么样的结果?
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
答:无效的指针,输出不确定。
19、 编写strcat函数,已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc); 其中strDest 是目的字符串,strSrc 是源字符串。
#include <iostream>
using namespace std;
char *strcat (char *strDest, const char *strSrc)
{
char *p = strDest;
while (*p != '\0')
{
p++;
}
while (*strSrc != '\0')
{
*p++ = *strSrc++;
}
return strDest;
}
int main()
{
char str[50] = "hello";
char *s = "chenxu";
cout<<str<<endl;
cout<<s<<endl;
Strcat(str, s);
cout<<str<<endl;
return 0;
}
答:方便赋值给其他变量。
(1) 耗时的操作使用线程,提高应用程序响应
(2) 并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。
(3) 多CPU系统中,使用线程提高CPU利用率
(4) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
其他情况都使用单线程。
21、int i=10, j=10, k=3; k*=i+j; k最后的值是?
答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低。
22、动态连接库的两种方式?
答:调用一个DLL中的函数有两种方法:
1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。
2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了
23、判断题
有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。(正确)
int (*ptr) (),则ptr是一维数组的名字。(错误 int (*ptr) ();定义一个指向函数的指针变量 )
指针在任何情况下都可进行>,<,>=,<=,==运算。(错误)
switch(c) 语句中c可以是int ,long,char ,float ,unsigned int 类型。( 错,不能用实形)