这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 敢不敢测测你的C语言功底?

共3条 1/1 1 跳转至

敢不敢测测你的C语言功底?

工程师
2012-02-17 12:49:59     打赏

      大家一定都在等STM32的开发板吧,我也在等,呵呵,玩遍各种开发板的时候,你是否忘了修练内功呢?

       会C语法与会用C语言写程序是两个概念,C的灵活性以及由此而产生的陷阱非常非常多,敢不敢测测自已的C语言功底?欢迎跟贴讨论下面的问题:

1、 用a给下面变量定义:
     a) 一个整型数

     b) 一个指向整型数的指针(A pointer to an integer)
     c) 一个指向指针的的针,它指向的指针是一个整型数
     d) 一个有10个整型数的数组|
     e) 一个有10个指针的数组,该指针是指向10个整形数的
     f) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
     g) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

2、关键字static的作用是什么?


3、关键字const是什么含意?


4、关键字volatile有什么含意?


5、嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代      码,      第一个设置a的bit 3,第二个清除a的bit 3。在以上两个操作中,要保持其它位不变。


6、嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。

7、中断是嵌入式系标中的重要的组成部分,这导致了很多编译开发商提供一种扩展让标准备C支持中断,具体代表是产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt去定义一个中断服务程序,请评论一下此代码的。

__interrupt double compute_area (double radius)

{

 double  area  =  PI * aadriuas* radius;

 printf(“%f”,area);

return area;

}


8、下面的代码输出是什么,为什么?

void foo(void)

{

 unsigned int   a = 6;

 int   b = -20;

 (a+b> 6) ? puts("> 6") :  puts("<= 6");

}


9、C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?

int   a = 5, b = 7, c;

c = a+++b;




关键词: 敢不敢     测测     你的     语言     功底     一个     整型    

工程师
2012-02-25 23:24:55     打赏
2楼
答案:

1、用a给下面变量定义: a) 一个整型数     int a;   b) 一个指向整型数的指针(A pointer to an integer)     int *a;   c) 一个指向指针的的针,它指向的指针是一个整型数        int * * a;   d) 一个有10个整型数的数组        int a[10];   e) 一个有10个指针的数组,该指针是指向10个整形数的        int *a[10];   f) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数        int *a(int);   g) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个 整型数               int (*a[10])(int);   2、关键字static的作用是什么?        Static根据其位置不同有三个不同的作用,1).在函数体内,一个被声明静态的变量在这个函数被调用过程中维持其值不变。其本质是什么? 2).在一个模块内,但在函数体外,一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。有何用处? 3).在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数只可被这一模块内的其它函数调用。有何用处?   3、关键字const是什么含意?        Const int a;     a是一个常整型数        Int const a;     a是一个常整型数        Const int *a;   a是一个指向常整型数的指针(指向的数不可修改,但a可以)        Int *const a;    a是一个指向整型数的常指针(指向的数可修改,但a不可以)        Int const *a const ; a是一个指向常整型数的常指针(指向的数和a均不可修改)   4、关键字volatile有什么含意?        一个被定义为volatile的变量是说这个变量可能会被意想不到的改变,这样,编译器就不会去假设这个变量的值了,变即是说,优化器在用到这个变量时每次都小心的重新读取这个变是的值,而不是使用保存在寄存器里的备份,最常用的就是在声明硬件的寄存器时使用。     5、嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a的bit 3。在以上两个操作中,要保持其它位不变。        #define BIT3 (1 << 3)        Static int a;        Void set_bit3(void) {        a |= BIT3; } Void clear_bit3(void) {        a &=  ~BIT3; }     6、嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。        Int *ptr;        Ptr = (int *)0x67a9;        *ptr = 0xaa55;     7、中断是嵌入式系标中的重要的组成部分,这导致了很多编译开发商提供一种扩展让标准备C支持中断,具体代表是产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt去定义一个中断服务程序,请评论一下此代码的。   __interrupt double compute_area (double radius) {  double  area = PI * aadriuas* radius; printf(“%f”,area); return area; }        ISR不能有参数和返回值!!!在ISR中做浮点运算是不明智的,因为ISR应该短而高效!!!而且很多编译器对浮点的可重入支持都不好,会让更多额外的寄存器入栈,printf函数常有可重入问题,而且性能也不高!!!     8、下面的代码输出是什么,为什么?   void foo(void)   {    unsigned int   a = 6;    int   b = -20;    (a+b> 6) ? puts("> 6") : puts("<= 6");   }        当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型,谨记!     9、C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?   Int a = 5, b = 7, c;   c = a+++b;   c = a+++b   等效为 c = (a++) +b   故a=6,b=7,c=12; 编写代码要有良好的风格和可读性,不然,自已修改起来都困难。  

工程师
2012-02-25 23:28:00     打赏
3楼
请不要做浮噪的嵌入式工程师!
想想我大学的前三年都是学各种MCU,实现各种很“牛B”的工能,现在回头看看突然觉得也就那样,返璞归真,从新修练内功,《数据结构与算法》《操作系统原理》《数字信号处理》,我想,这些才是我永立于不败之地的根基,才是我最大的资本!!!

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]