C语言经典面试题丨快来测一测你的基础语法扎不扎实,你能做出几题?

Posted C语言编程俱乐部

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言经典面试题丨快来测一测你的基础语法扎不扎实,你能做出几题?相关的知识,希望对你有一定的参考价值。

一、请填写 bool , float,  指针变量  与“零值”比较的 if  语句。

提示:这里“零值”可以是 0, 0.0 , FALSE 或者“空指针” 。例如 int  变量 n  与“零值”比较的 if  语句为:

if ( n == 0 )

if ( n != 0 ) \\

以此类推。 

(1)请写出 bool  flag  与“零值”比较的 if  语句:

【标准答案】if ( flag )    if ( !flag )

(2)请写出 float  x  与“零值”比较的 if  语句:

【标准答案】 const float EPSINON = 0.00001;if ((x >= - EPSINON) && (x <= EPSINON);不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。

(3)请写出 char  *p  与“零值”比较的 if  语句:

【标准答案】 if (p == NULL)    if (p != NULL)

二、以下为 Linux下的 32 位 C程序,请计算  sizeof 的值。                                                           

char  str[] = “Hello” ;                                                   

char   *p = str ;                                                          

  int     n = 10;       

请计算:                                                 

(1)sizeof (str ) =

(2)sizeof ( p ) =

(3)sizeof ( n ) =

(4)

void Func ( char str[100])                                            

                                                                                                             

     ……    ;                                                                    

                                                                                                                  

请计算:sizeof( str ) =                                                                                       

(5)void *p = malloc( 100 );

请计算:sizeof ( p ) =

【标准答案】(1)6、(2)4、(3)4、(4)4、(5)4

三、 long a=0x801010; a+5=?

【标准答案】0x801010用二进制表示为:“1000 0000 0001 0000 0001 0000”,十进制的值为8392720,再加上5就是8392725。

四、设有以下说明和定义: 

typedef union

 

    long i;

    int k[5];

    char c;

 

DATE;

struct data

 

    int cat;

    DATE cow; double dog;

 

too;

DATE max; 

则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:___

【标准答案】DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节。所以它的大小是20 data是一个struct,每个变量分开占用空间。依次为int4 + DATE20 + double8 = 32。所以结果是 20 + 32 = 52。

五、请问以下代码有什么问题:

 int main()

 

     char a;

     char *str=&a;

         strcpy(str,"hello");

         printf(str);

     return 0;

 

【标准答案】没有为str分配内存空间,将会发生异常 问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。

六、请问以下代码有什么问题:

char* s="AAA";

    printf("%s",s);

    s[0]='B';

    printf("%s",s);

有什么错?

【标准答案】"AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。 cosnt char* s="AAA"; 然后又因为是常量,所以对是s[0]的赋值操作是不合法的。

七、c和c++中的struct有什么不同?

【标准答案】c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。

八、写出输出结果

int main()



    int a[5]=1,2,3,4,5;

    int *ptr=(int *)(&a+1);

    printf("%d,%d",*(a+1),*(ptr-1));

九、 

char szstr[10]; strcpy(szstr,"0123456789"); 产生什么结果?为什么?

【标准答案】长度不一样,出现段错误。

十、

int a=248;

b=4;

int const c=21;

const int *d=&a;

int *const e=&b;

int const *f const =&a;

请问上述表达式哪些会被编译器禁止?为什么?

十一、 

void main()

 

     char aa[10];

     printf(“%d”,strlen(aa));

  

会出现什么问题?打印结果是是多少?

【标准答案】sizeof()和初不初始化,没有关系,strlen()和初始化有关,打印结果值未知。

十二、

给定结构struct  A char t:4; char k:4; unsigned short i:8; unsigned long m; ;

问sizeof(A) = ?

【标准答案】8

十三、

struct name1



    char str;

    short x;

    int num;

 ;

求sizeof(name1)?

【标准答案】8

十四、

struct name2



    char str;

    int num;

    short x;

 ;

求sizeof(name2)?

【标准答案】12

十五、程序哪里有错误?

wap( int* p1,int* p2 )



    int *p;

    *p = *p1;

    *p1 = *p2;

    *p2 = *p;

【标准答案】p为野指针

十六、什么是预编译,何时需要预编译?

预编译又称为预处理,是做些代码文本的替换工作。处理#开头的 指令,比如拷贝#include 包含的文件代码,#define 宏定义的替换,条件 编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译 指令,预编译指令指示了在程序正式编译前就由编译器进行的操作, 可以放在程序中的任何位置。

c 编译系统在对程序进行通常的编译之前,先进行预处理。c 提供的 预处理功能主要有以下三种:1)宏定义 2)文件包含 3)条件编 译

十七、 (void *)ptr 和 (*(void**))ptr的结果是否相同?其中ptr为同一个指针。

【标准答案】(void *)ptr 和 (*(void**))ptr值是相同的

十八、要对绝对地址0x100000赋值,我们可以用 (unsigned int*)0x100000 = 1234; 那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?

【标准答案】*((void (*)( ))0x100000 ) ( ); 首先要将0x100000强制转换成函数指针,即: (void (*)())0x100000,然后再调用它: *((void (*)())0x100000)();

十九、 int a,b,c 请写函数实现c=a+b ,不可以改变数据类型,如将c改为long int,关键是如何处理溢出问题?

【标准答案】

bool add (int a, int b,int *c)

 

    *c=a+b;

    return (a>0 && b>0 &&(*ca || *c>b)));

 

————————————————

今天的学习就到此结束,如果你想学习更多编程知识,欢迎关注我~

- End -

————————————————

不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员

【值得关注】我的 编程学习交流俱乐部【点击进入】

————————————————

编程入门资料(网盘链接免费分享):

以上是关于C语言经典面试题丨快来测一测你的基础语法扎不扎实,你能做出几题?的主要内容,如果未能解决你的问题,请参考以下文章

Python基础综合项目名片管理系统,看似简单,却很适合检验基本功扎不扎实

Python基础综合项目名片管理系统,看似简单,却很适合检验基本功扎不扎实

测一测你的linux基础能力合格吗?

Python二级测试:数据结构与算法

iOS面试题 -总结 ,你的基础扎实吗?

每日一题丨C语言