C语言

原创 2007年09月12日 15:44:00

函数指针:
定义:typedef void (F1)(int p1, int p2)
    typedef void (*F2)(int p1, int p2)
    test (int p1, int p2);

    F1 * fp1;
    F2   fp2;
    F1   fp3;
问: 语句
fp3 = test;
fp2 = test;
fp1 = test
是否成立?
答案:第一条语句有错,其余两天语句正确。

指针运算:
int *p1, *p2;
int value;

p1 = (int *)0x500;
p2 = (int *) 0x508;
value = p2-p1;
问:value的值?

答案:2

定义union,并说明如何使用。如何在union中进行位域的定义?

枚举类型:
enum type1 {
     A,
     B
     };
enum type2 {
     C =1,
     D,
     E,
     F
     }
    问:A,B,D,E,F 的值分别是多少?
答案:0,1,2,3,4
宏定义函数与普通函数调用的区别?

宏定义中若有多行,如何连接
答案:用反斜杠’/’
#define fn_max(x,y)    /
do {       /
   .....      /
   .....      /
   }while(0)

int main()
{
   fn_max(x,y);
}
问:为什么要用do……while(0)把宏定义的多条语句括起来?
答案:便于优化

struct struct_A{
int a;
char b;
int c;
short d;
}
    struct struct_B{
   int a;
   char b;
   short c;
   int d;
   }
struct_A a;
struct _B b;
问:sizeof(struct_A a) = ?
sizeof(struct_A b) = ?
答案:sizeof(a) 为16,sizeof(struct_A b)为12

9. #include
main()
{
char **p;
char *m[] = {“Welcome /n”,
      “to /n”,
      “join /n”,
      “us! /n”
      };
   p = m;
   printf(“%s/n”,*p++);
   printf(“%c/n”,**p);
}
问:写出程序的执行结果
答案:“Welcome”和“t”

10. static局部变量和static全局变量的区别
答案:主要是作用域的不同,static局部变量只在函数内部或者程序块内有效,而static全局变量在整个C文件模块中都有效,注意它在其它C文件中无效。

11. 指向常量的指针和常指针的区别
答案:指向常量的指针所指向的内容不能被修改但能够指向其它的量,而常指针是指向的内容可以被修改但指针不能再指向其它地方。

12. if (a=b)
printf(“a==b”)
else
printf(“a!=b”);
输出结果为:
A.a==b    B.a!=b    C.不一定    D.不能运行
答案:不一定,这要根据b的内容来决定。通常再编程时不要使用此类的赋值语句。

13.在内联函数中使用static变量,比如
inline test()
{ static couter = 0;
   counter++;
}
会有什么问题?
答案:会造成多次定义该变量,因此再内联函数中禁止定义静态变量

14. F是一个结构类型,有如下定义:
F f1,f2;
问:f1=f2;语句是否成立?
答案:该语句成立,不过有的编译器不支持。实际上编译器也是用内存拷贝函数来实现的。

15.全局变量、局部变量、模块变量在内存空间中如何存放?(数据区or栈空间?)
答案:全局变量在全局空间分配,局部变量在栈空间分配,模块变量在全局空间分配。

16.struct A{
......
......
union {
   int x;
   .....
   };
}
struct A a;
问:a.x这样的表示法是否成立?
答案:成立

如果结构定义改为如下定义
.struct A{
......
int x;
union {
   int x;
   .....
   };
}
那a.x表示法是否成立?
答案:不成立,编译时会报x变量重定义

17. #define REDEF(name,arg1,arg...) /
       _##name (arg1,##arg)
问:以下两个语句宏展开的结果
REDEF(test_fn1,int a,int b);
REDEF(test_fn2,int a);
答案:
_test_fn1(int a ,int b)
_test_fn2(int a);
注意:在VC中不支持,gcc才支持该参数宏函数。

18. fnxxxx_max(char str[])
{
    putchar str[0];
    str++; //(1)
    printf(“%s”,str);
}
    main()
    {
      char str[20]={“ABCDEFG”};
      fnxxxx_max(str);
      str++; //(2)
      printf(“%s”,str);
}
问:语句(1)和语句(2)是否成立?
答案:语句(1)成立,语句(2)不成立
19.#define SRR 0x001;
    #define SRT 0x002;
    #define SRI 0x0900;

EVENT = SRR|SRT|SRI
问:上面的语句有什么问题?EVENT的值会是多少?
答案:宏展开后变为:
EVENT =   0x001; 0x002;0x0900;
因此EVENT的值为0x001,所以在编程时一定要小心,一定不要在常量宏定义的后面加上分号 

相关文章推荐

linux环境下最简单的C语言例子

1、装好linux系统和配置GCC环境       给自己的电脑上安装linux系统,比如我用大的是ubuntu,然后在ubuntu上配置GCC环境,如果不知道配置,请百度“linux上怎么配置GCC...

C语言基础学习基本数据类型-浮点型

c语言里的浮点型数据类型

71 C语言非阻塞式键盘监听

C语言非阻塞式键盘监听

C语言内存分配(详细解说)

要想完全理解C语言的内存分配,必须要知道计算机的组成和基本原理。1. 计算机的组成计算机的五大组成部分:运算器、控制器、存储器、输入设备和输出设备。我们都知道计算机的处理中心是CPU,它主要由运算器和...
  • faihung
  • faihung
  • 2017年10月25日 23:05
  • 36

C语言vector的使用方法

vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec...

C语言的字符串输入gets()函数

C语言的字符串输入gets()函数 字符串简介字符串(character string)是一个或多个字符的序列。如下所示:"Zing went the strings of my heart!"...

C语言::打印100-200之间的素数

题目要求 编写一个C语言程序,要求打印100~200之间的素数 算法分析 在C语言程序中,我们要想打印100-200之间的素数,首先我们得判断该数是不是素数. 判断素数的算法,有位大神写过这样...

c语言自带的排序算法qsort

qsort函数用法 qsort   功 能: 使用快速排序例程进行排序    用 法: void qsort(void *base, int nelem, int width,...

十大【C语言】经典书籍,应该有你看过的吧

C Programming:A Modern Approach C语言程序设计:现代方法     简介:《C语言程序设计:现代方法》是C语言的经典之作,被誉为“近10年来最好的一部C语言著作”。书...

霍夫曼树及霍夫曼编码的C语言实现

从周五开始学习霍夫曼树,一直到今天终于完成,期间遇到了各种各样的棘手的问题,通过一遍遍在纸上分析每一步的具体状态得以解决。现在对学习霍夫曼树的过程加以记录首先介绍霍夫曼树霍夫曼树(Huffman Tr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言
举报原因:
原因补充:

(最多只允许输入30个字)