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基础综合项目名片管理系统,看似简单,却很适合检验基本功扎不扎实