C笔记(转)
来源:互联网 发布:剑三妖艳成男脸型数据 编辑:程序博客网 时间:2024/06/07 14:56
1、 二维数组名————→理解为 行指针; 2、 int a,*p; p=&a, 有p= =&a; 3、 a---b 就是 (a- -) - (b); 4、 else 始终与同一结括号内最近的未匹配的if 结合。 5、 int a[10] ; int *p=a; sizeof(a) = =20;sizeof(p)= =2; 6、 int a[2][3] ,*p; p=a是非法的,因为a是一个二维数组,即“数组的数组”,在此a名称会将其转为一个指向数组的指针;而p是一个指向整形变量的指针,这个语句试图将一种类型的指针赋值给另一种类型的指针,所以是非法的。只有(*p)[3]才能。 7、 对一个数组进行初始化的函数 ZeroMemory(c,sizeof(c)),c 为一数组,于是把数组c清零。 8、(高)算术运算符—— 移位运算符—— 关系运算符——逻辑运算符(低) +-*/ 《 》 >,=,< || 、&& 9、全局变量和静态变量未初始化时默认为0外,其他(函数)是不可以的 10、指针变量= = 数组(只是数组名是常量,不能进行自增自减) 11、C语言中会自动地将作为参数的数组声明转为相应的指针声明。 12、main(int a, char*b[]) 与main(int a, char**b)完全等价; 13、空指针并非空字符串 14、int (*ap)[31]表示*ap是一个有着31个整形元素的数组,因此ap就是一个指向这样的数组的指针。 15、int (*p)( )是一个函数指针,表示p是一个指向函数的指针,*p是一个函数。 int *p()是一个指针函数,表示p是一个返回一个指向整数的指针的函数。 16、(1)形参中的数组不能再理解为数组,而必须理解为指针:不能用 sizeof() 求大小;但可以再赋值,这与数组名的指针常量性质不一样。传值时有内容的复制,但数组内的元素可能很多,为避免内容的大量复制而占用太多的内存,C 规定数组传参就是传指针。 (2)int a[][] 不能做形参,因为 a 是指向 int[] 这样一种数据类型的数组指针,但下标大小没有确定。而 int a[][8] 可以,并可以直接用二维数组名(无须显示转换)做其实参。 17、在处理一个数组的元素时,使用指针自增(p++)的方式通常比直接使用数组下标更快,使用指针能够使程序得以优化。 18、C 允许定义多维数组,维数上限由编译器定义。但多于三维的数组并不常用,因为多维数组所需的内存空间对维数呈指数增长。并且,计算各维下标会占用 CPU 时间(存取多维数组元素的速度比存取一维数组元素的速度慢)。 19、对数组初始化时注意,C89 要求必须使用常量初始化字符,而 C99 允许使用非常量初始化字符来初始化本地数组。 20、gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这是与scanf函数不同的。 21、如果我们有一个int test(int a)的函数。那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。 22、a+i,a[i],*(a+i),&a[i][0]是等同的。 此外,&a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。 23、函数不能作为赋值对象,下列语句是错误的:s w a p ( x ,y) =100。 24、rand()%401产生的才是0~400的随机数。(包括0和400) |
25、 用变量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); h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer ) int (*a[10])(int); |
26、
中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。
__interrupt double compute_area (double radius)
{ double area = PI * radius * radius;
printf(" Area = %f", area);
return area;
}
ISR 不能返回一个值;ISR 不能传递参数;不允许在ISR中做浮点运算
27、
1. 请填写下列两个函数分别实现对变量a实现置位和清除“BIT3”位。
#define BIT3 (0x1<<3)
static int a;
void set_bit3(void)
{
a = a | BIT3;
}
void clear_bit3(void)
{
a = a & (~BIT3);
}