C语言面试题目

1、请填写 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) 

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

char  str[] = “Hello” ;                                                   

char   *p = str ;                                                          

  int     n = 10;                                                                 

请计算                                                      

    (1)sizeof (str ) = 
    (2)sizeof ( p ) = 
    (3)sizeof ( n ) =
【标准答案】(1)6、(2)4、(3)4

   (4)void Func ( char str[100])                                            

 {                                                                                                            

……    ;                                                                    

      }                                                                                                                 

请计算 sizeof( str ) =                                                                                       

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

请计算sizeof ( p ) = 
【标准答案】(4)4、(5)4

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

4、 写一个函数找出一个整数数组中,第二大的数。

5、设有以下说明和定义: 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.

6、请问以下代码有什么问题: int main() { char a; char *str=&a; strcpy(str,"hello"); printf(str); return 0; }
  【标准答案】没有为str分配内存空间,将会发生异常 问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。

7、请问以下代码有什么问题:                                 char* s="AAA"; printf("%s",s); s[0]='B'; printf("%s",s); 有什么错?

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

8、 写出下面的结果
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char *str5 = "abc";
const char *str6 = "abc";
char *str7 = "abc"; char *str8 = "abc";
cout << ( str1 == str2 ) << endl; cout << ( str3 == str4 ) << endl; cout << ( str5 == str6 ) << endl; cout << ( str7 == str8 ) << endl;

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

10、 写出输出结果
Int main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}

11、 char szstr[10]; strcpy(szstr,"0123456789"); 产生什么结果?为什么?
  【标准答案】长度不一样,出现段错误。

12、 
int a=248; b=4;int const c=21;const int *d=&a;
int *const e=&b;int const *f const =&a;
请问下列表达式哪些会被编译器禁止?为什么?

13、 void main() { char aa[10]; printf(“%d”,strlen(aa)); }                                                                                                      会出现什么问题?打印结果是是多少?
  【标准答案】sizeof()和初不初始化,没有关系,strlen()和初始化有关,打印结果值未知。

14、给定结构struct  A { char t:4; char k:4; unsigned short i:8; unsigned long m; };问sizeof(A) = ?
  【标准答案】8

15、 struct name1{ char str; short x; int num; };求sizeof(name1)?
【标准答案】8

16、 struct name2{ char str; int num; short x; };求sizeof(name2)?
【标准答案】12

17、程序哪里有错误
  wap( int* p1,int* p2 )
  {
          int *p;
         *p = *p1;
         *p1 = *p2;
         *p2 = *p;
  }
 【标准答案】p为野指针

18、什么是预编译,何时需要预编译?
 预编译又称为预处理,是做些代码文本的替换工作。处理#开头的 指令,比如拷贝#include 包含的文件代码,#define 宏定义的替换,条件 编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译 指令,预编译指令指示了在程序正式编译前就由编译器进行的操作, 可以放在程序中的任何位置。
c 编译系统在对程序进行通常的编译之前,先进行预处理。c 提供的 预处理功能主要有以下三种:1)宏定义 2)文件包含 3)条件编 译

19、 (void *)ptr 和 (*(void**))ptr的结果是否相同?其中ptr为同一个指针。
  【标准答案】(void *)ptr 和 (*(void**))ptr值是相同的

20、要对绝对地址0x100000赋值,我们可以用 (unsigned int*)0x100000 = 1234; 那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?
  【标准答案】*((void (*)( ))0x100000 ) ( ); 首先要将0x100000强制转换成函数指针,即: (void (*)())0x100000 然后再调用它: *((void (*)())0x100000)();

21、 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 &&(*c<a || *c<b) || (a<0 && b<0&&(*c>a || *c>b))); }




       

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ToF君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值