部分C语言题目

来源:互联网 发布:java如何清除缓存 编辑:程序博客网 时间:2024/04/28 02:34

1、下列描述不正确的是_______D________

A.int **a[2][2]定义的是指向指针的指针数组

B.定义int **a[2][2],在32位系统下,a所用的内存空间为16

C. int **a[2][2]={0}

D.int **a[2][3]={{0,0},{0,0},{0,0}}

ps:我居然认为B不对,D对,23列我都不知道是啥。

 

2、有以下程序A

main()

{

int m=12,n=34;

printf(“%d%d”,m++,++n);printf(“%d%d\n”,n++,++m);

}

输出结果为____B_____

A12343513  B12353514  C12353513      D12343514

3、若aint类型,且其值为3,则执行完表达式a+=++a后,a的值是____C____

A6      B7       C8       D9

4、下列描述不正确的是_______D________

A.int **a[2][2]定义的是指向指针的指针数组

B.定义int **a[2][2],在32位系统下,a所用的内存空间为16

C. int **a[2][2]={0}

D.int **a[2][3]={{0,0},{0,0},{0,0}}

5、以下程序的运行结果是____B___A0  B1  C5  D2
    union
    {
        struct
        {
            unsigned char c1:3;
            unsigned char c2:3;
            unsigned char c3:2;
        }s;
        unsigned char c;
    }u;
    int main()
   {
       u.c=100;
       printf("%d\n",u.s.c3);
       return 0;
   }

6int a=5;则表达式++a++;的结果为____D_____

       A 5    B6     C7    D、表达式不正确

7、在C语言中, char型数据在内存中的存储形式是:____d____

A补码   B、反码    C、原码      DASCII

8、逗号表达式(a=5*5a+20),a+15的值是__B__
         A35      B40       C55        D20

 

*********************************************************

1、  常用的互联网协议是TCP/IP协议,应用层协议有那些:http,https,ftp,tftp,dns,sip ,telnet,rtp

 

2、  指针函数和函数指针的含义、区别

函数指针是指向一个函数的指针,可以通过指针调用该函数。如:

int f( int );     int (*pf)( int ) = &f; //&是可选的,因为函数名被使用时总是由编译器把它转换为函数指针。

函数指针有两个用途:调用函数和做函数的参数

--------------------------------------------------------------------------------------------

指针函数:程序中的每个函数都位于内存中的某个位置,所以存在指向那个位置的指针是完全可能的。

指针函数是指函数的返回值类型是一个指针类型,即本质是一个函数。

int *f( int );                           //函数返回值是指针类型

 

 

3#ifndef #define#endif的典型作用是什么?

           防止重复编译

           一般用来防止重复包含头文件

 

4、指针常量和常量指针

a)        常量指针:常量是形容词,指针是名词,首先是个指针,即指向常量的指针。指针所指向的值不能修改。如:

C/C++中,常量指针是这样声明的:

1const int*p;

2int const *p;

b)        指针常量:指针是形容词,常量是名词。即本质是一个常量,而用指针修饰它,那么说明这个常量的值应该是一个指针。指针常量的值是指针,这个值因为是常量,所以不能被赋值。

1.        int a;

int *const b = &a;      //const放在指针声明操作符的右侧

c)        指向常量的指针常量

指向常量的指针常量就是一个常量,且它指向的对象也是一个常量。因为是一个指针常量,那么它指向的对象当然是一个指针对象,而它又指向常量,说明它指向的对象不能变化。

                   const int a = 25;

const int * const b = &a;

 

5、把一个unsigned short a的变量的高8位和低8位的值互换,用#define

#include<stdio.h>

#defineswap(a) ( ( a << 8 )|( a >>8) )

voidmain()

{

unsigned short a = 0x1234;

a=swap(a);

printf("%x",a);                  

}

6void main()

{

         inta=1;

         printf("%d,%d,%d\n",a++,a++,a++);

         printf("%d\n",a);

}

输出:

3,2,1

4

printf把要打印的变量入栈,最后的变量在栈顶,先计算,即先处理后面的那个a++,依次往左。

 

7//a[10],用指针实现,找出数组中最大的值,并输出该最大值

#include<stdio.h>

void main()

{

         inta[10] = { 10,3,2,5,1,7,44,54,2};

         int*p ;

         int*s;                                  //记录最大值

         for(p = a, s = a; p<(a+9); p++ )

         {

                   if(*p> *s)

                            *s= *p;

         }

         printf("%d\n",*s);

 

}

 

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

答案:( ( void (*)( ) )0x100000 ) ( ) 或者 ( * ( void (*)( ) )0x100000 ) ( )首先要将0x100000强制转换成函数指针,: (void(*)())0x100000然后再调用它: ( * ( void (*)( ) )0x100000 ) ( );typedef可以看得更直观些:typedef void(*)() voidFuncPtr; (* (voidFuncPtr)0x100000)();

9、关键字volatile有什么含义?并给出三个不同的例子。

对于volatile类型的变量,该变量可能会被意想不到地改变,这样编译器就不会去假设这个变量的值。编译器在用到这个变量的时候,必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。如下三种例子:

1)、并行设备的硬件寄存器(如:状态寄存器)

2)、一个中断服务子程序中会访问到的非自动变量

3)、多线程应用中被几个任务共享的变量

 

10sizeofstrlen

         sizeof()计算括号里的内容所占的内存,如果是字符串,计算‘\0

         strlen()只能接受字符串,不计算’\0’;

11、一语句实现x是否为2的若干次幂的判断

#define is2*n(x)  ((x & (x- 1))? 0 : 1)

12、用#define实现一个unsigned short a,高8位和低8位互换

          #define swap(a) (  a >> 8) || ( a << 8 )

 

13、用宏定义实现swap(a,b),交换两个数值

        #define swap(x,y) do{x=x+y; y = x-y; x= x-y;}while(0)

或者

        #define swap(x,y) \
                 x=x+y;\
                 y=x-y;\
                 x=x-y;

 

12 优先级反转

 

 

 

原创粉丝点击