则执行C语言语句unsigned,部分C语言题目

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对,2行3列我都不知道是啥。

2、有以下程序A

main()

{

int m=12,n=34;

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

}

输出结果为____B_____

A、12343513  B、12353514  C、12353513      D、12343514

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

A、6      B、7       C、8       D、9

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___A:0  B:1  C:5  D:2

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;

}

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

A 、5    B、6     C、7    D、表达式不正确

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

A补码B、反码C、原码D、ASCII码

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

A、35      B、40       C、55        D、20

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

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++中,常量指针是这样声明的:

1)const int*p;

2)int 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

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

voidmain()

{

unsigned short a = 0x1234;

a=swap(a);

printf("%x",a);

}

6、void 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

void main()

{

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

int*p ;

int*s;                                  //记录最大值

for(p = a, s = a; 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)、多线程应用中被几个任务共享的变量

10、sizeof和strlen

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、 优先级反转

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值