Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11413
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-21 14:28
文章分类

全部博文(11)

文章存档

2015年(11)

我的朋友
最近访客

分类: C/C++

2015-08-14 00:33:25

1. 用变量a给出下面的定义
a) 一个整型数(An integer)
    int a;
b) 一个指向整型数的指针(A pointer to an integer)
    int *a;
c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
    int** a;
d) 一个有10个整型数的数组(An array of 10 integers)
    int a[10];
e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)
    int* a[10];
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)
    int (*a)[10]
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
    int (*a)(int arg);
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer
argument and return an integer )
    int (*a[10])(int argc);

2.关键字static的作用是什么?
  • 变量存储到静态区
  • 全局变量或者函数,限定有效区域,仅自己可见

3.关键字const是什么含意?
  • 赋予"只读"属性

4.关键字volatile有什么含意 并给出三个不同的例子。
  • 防止被编译器优化,含
    • 义,对于一些垃圾操作,编译器会耍小聪明的无视掉.
  • 告诉编译器会在程序外被改变,必须从内存中读取,而不能把他放在cache或寄存器中重复使用。

5.嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
  • 消位:与非 & :a &= ~(1<<3)
  • 置位:或  | :a |= (1<<3)
6.嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务
  • *(unsigned long *)0x67a9 = 0xaa66;

7.中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。
__interrupt double compute_area (double radius)
{
double area = PI * radius * radius;
printf(" Area = %f", area);
return area;
}
  • 不能返回值
  • 不能传参
  • 浮点运算并不通用
  • printf影响性能

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

void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6) puts("> 6") : puts("<= 6");
}
  • 无符号 与 有符号 进行运算 , 将当作无符号运算,-20会变成反码:-20->0x14->0xffffffeb->0xffffffec + 6 = 0xfffffff2 
  • 所以结果是 > 6 的.

9.unsigned int zero = 0;
 unsigned int compzero = 0xFFFF;
  • 为了兼顾平台特性,int 可以是 2 字节 或者 4字节 ,所以写成 unsigned int compzero = ~0;

10.尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么?
  • 内存碎片,变量的有效时间,碎片收集
char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
puts("Got a null pointer");
else
puts("Got a valid pointer");
  • 申请 0 字节 和 1 字节的效果是一样的
























阅读(261) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~