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