华为笔试题.docx

上传人:b****6 文档编号:15385027 上传时间:2023-07-04 格式:DOCX 页数:14 大小:18.95KB
下载 相关 举报
华为笔试题.docx_第1页
第1页 / 共14页
华为笔试题.docx_第2页
第2页 / 共14页
华为笔试题.docx_第3页
第3页 / 共14页
华为笔试题.docx_第4页
第4页 / 共14页
华为笔试题.docx_第5页
第5页 / 共14页
华为笔试题.docx_第6页
第6页 / 共14页
华为笔试题.docx_第7页
第7页 / 共14页
华为笔试题.docx_第8页
第8页 / 共14页
华为笔试题.docx_第9页
第9页 / 共14页
华为笔试题.docx_第10页
第10页 / 共14页
华为笔试题.docx_第11页
第11页 / 共14页
华为笔试题.docx_第12页
第12页 / 共14页
华为笔试题.docx_第13页
第13页 / 共14页
华为笔试题.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

华为笔试题.docx

《华为笔试题.docx》由会员分享,可在线阅读,更多相关《华为笔试题.docx(14页珍藏版)》请在冰点文库上搜索。

华为笔试题.docx

华为笔试题

一.用变量a给出下面的定义

1)一个整形数

2)一个指向整形数的指针

3)一个指向指针的指针,它指向的指针是指向一个整形数

4)一个有10个整形数的数组

5)一个有10个指针的数组,该指针是指向一个整形数的

6)一个指向有10个整形数数组的指针

7)一个指向函数的指针,该函数有一个整形参数并返回一个整形数

8)一个指向有10个指针的数组,该指针指向一个函数,该函数有一个整形函数并返回一个整形

二.说出static的作用

三.说出全局变量和静态全局变量的区别,并分别怎么使用

C语言面试题

1、局部变量能否和全局变量重名?

  答:

能,局部会屏蔽全局。

要用全局变量,需要使用":

:

"

  局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。

对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

  2、如何引用一个已经定义过的全局变量?

  答:

extern

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

  3、全局变量可不可以定义在可被多个.C文件包含的头文件中?

为什么?

  答:

可以,在不同的C文件中以static形式来声明同名全局变量。

  可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错

  4、语句for(;1;)有什么问题?

它是什么意思?

  

  5、do……while和while……do有什么区别?

1.找错

voidtest1()

{

charstring[10];

char*str1="0123456789";

strcpy(string,str1);

}

voidtest2()

{

charstring[10],str1[10];

for(intI=0;I<10;I++)

{

str1[I]='a';

}

strcpy(string,str1);

}

voidtest3(char*str1)

{

charstring[10];

if(strlen(str1)<=10)

{

strcpy(string,str1);

}

}

2.找错

#defineMAX_SRM256

DSNget_SRM_no()

{

staticintSRM_no;

intI;

for(I=0;I;i++)

{

SRM_no%=MAX_SRM;

if(MY_SRM.state==IDLE)

{

break;

}

}

if(I>=MAX_SRM)

return(NULL_SRM);

else

returnSRM_no;

}

3.写出程序运行结果

intsum(inta)

{

intc=0;

staticintb=3;

c+=1;

b+=2;

return(a+b+c);

}

voidmain()

{

intI;

inta=2;

for(I=0;I<5;I++)

{

printf("%d,",sum(a));

}

}

4.

intfunc(inta)

{

intb;

switch(a)

{

case1:

b=30;

case2:

b=20;

case3:

b=16;

default:

b=0;

}

returnb;

}

则func

(1)=?

5:

inta[3];

a[0]=0;a[1]=1;a[2]=2;

int*p,*q;

p=a;

q=&a[2];

则a[q-p]=?

6.

定义int**a[3][4],则变量占有的内存空间为:

_____

7.

编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。

如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。

1.说出下面程序段的功能,并说出两段程序的优缺点.

程序段1:

intftest1(constchar*str){

    charnum[256]={0};

    unsignedchar*pos=(unsignedchar*)str;

    while(*pos!

=0){

       if(num[*pos]==0){ 

num[*pos++]=1;

}else{

break;

}

  }

    return*pos==0?

0:

1;

}

程序段2:

intftest2(constchar*str){

    constchar*p1,*p2;

    if(*str==0)

        return0;

    for(p1=str;*p1!

=0;p1++){

        for(p2=p1+1;*p2!

=0;p2++){

            if(*p1==*p2)

                return1;

        }

    }

    return0;

}

注:

提倡采用程序段2,本着易读原则;

2.写出运行结果

#include

#include

#include

intmain(intargc,char*argv[]){

chara[]="abc";

charb[]={'d','e','f'};

printf("aslen=%d,bslen=%d\n",strlen(a),strlen(b));

printf("a=%s,b=%s\n",a,b);

printf("asizelen=%d,bsizelen=%d\n",sizeof(a),sizeof(b));

return0;

\0

c

b

a

f

e

d

}

aslen=3,bslen=6

a

a=abc,b=defabc

asizelen=4,bsizelen=3

注:

栈分配原则:

从高地址->低地址分配;

b

4.说出错误

voidtest(){

charstr[10];

char*str1="0123456789";//allocintheonlyreaddataarea

strcpy(str,str1);//arrayindexoverflow

Strcpy(str1,str)//becausestr1allocedintheonlyreaddataarea

}

 

5.说出错误

voidtest(){

charstr[10],str1[10];

for(int=0;i<10;i++){//memset(str,0,sizeof(str))

//modifi<10-1

str[i]='a';

}

strcpy(str1,str);//findnotstringfileenddescripe

}

6.写出程序的运行结果

#include

intsum(inta){

staticintb=3;

b+=2;

return(a+b);

}

intmain(void){

inta=2;

inti;

for(i=0;i<5;i++){

printf("%d,",sum(a));

}

return0;

}

 

7.写出运行结果

#include

intmain(void){

inta[3];

a[0]=0;

a[1]=1;

a[2]=2;

int*p,*q;

p=a;

q=&a[2];

intc=a[q-p];

printf("valuec=%d\n",c++);

printf("valuec=%d\n",c);

return0;

}

valuec=2

valuec=3

8写出运行结果

#include

#include

#defineSTRCPY(a,b)strcpy(a##_p,#b)

#defineSTRCPY1(a,b)strcpy(a##_p,b##_p)

intmain(void){

charvar1_p[20];

charvar2_p[30];

strcpy(var1_p,"aaaa");

strcpy(var2_p,"bbbb");

STRCPY1(var1,var2);

STRCPY(var2,var1);

printf("var1=%s\n",var1_p);

printf("var2=%s\n",var2_p);

return0;

}

var1=bbbb

var2=var1

11.指出下面程序段的错误

voidteststr(char*p){

charstr[16];

intn;

assert(NULL!

=p);

sscanf(p,"%s%d",str,n);//n->&n

if(0==strcmp(str,"something")){

...

}

}

12.指出下面程序段的错误

voidtest2(){

charstring[10],str1[10];

inti;

for(i=0;i<10;i++){

str1[i]='a';

}

strcpy(string,str1);

}

错误:

数组越界;

解决方法:

方法一:

#defineSTR_LEN10

voidtest2(){

charstring[10],str1[10];

inti;

memset(str1,0,sizeof(str1));

for(i=0;i

str1[i]='a';

}

strcpy(string,str1);

}

方法二:

#defineSTR_LEN10

voidtest2(){

charstring[10],str1[10];

inti;

for(i=0;i

str1[i]='a';

}

str1[STR_LEN]=‘\0’;

strcpy(string,str1);

}

16.请指出下列程序中的错误并且修改

voidget_memory(char*p,intsize){

p=(char*)malloc(size);//piscopyerstr's

}

voidtest(void){

char*str=NULL;

get_memory(str,100);

strcpy(str,"helloworld");

printf(str);

}

A:

错误--参数的值改变后,不会传回

get_memory并不能传递动态内存,Test函数中的str一直都是NULL。

strcpy(str,"helloworld");将使程序崩溃。

修改如下:

方法一:

char*get_memory(intsize){

char*p=(char*)malloc(size);

returnp;

}

voidtest(void){

char*str=NULL;

str=get_memory(100);

strcpy(str,"helloworld");

printf(str);

}

方法二:

voidget_memory(char**p,intsize){

*p=(char*)malloc(size);

}

20.写下面sizeof的求值

A.32位为例,计算sizeof的值.

charstr[]="Hello";

char*p=str;

intn=10;

请计算

sizeof(str)=6//include'/0'

sizeof(p)=4

sizeof(n)=4

B.voidfunc(charstr[100]){

请计算

sizeof(str)=4

}

C.void*p=malloc(100);

请计算

sizeof(p)=4

D.structdate{

intyear;

intmonths;

intdays;

};

structdate*d;

请计算

d=malloc(sizeof(structdate));

sizeof(d)=4

sizeof(*d)=12

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2