1、C语言中,宏分为哪几种?
答:宏定义是由源程序中的宏定义命令完成的,宏分为有参数和无参数两种。
2、无参宏定义如何实现的?
答:
形式:
#define 标识符 字符串
说明:#表示这是一条预处理命令,define为宏定义命令,标识符为锁定义的宏名,字符串可以是常数、表达式、格式串等。
eg:
#define M (y*y+3*y)
3、宏定义加上分号会怎么样?
答:宏定义不是说明或者语句,在行末不必加上分号,否则会连分号一起置换。
4、宏定义的位置及作用域是啥?
答:宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束,也可以用“#undef”命令终止。
5、结构体的定义是啥?
答:结构体是一种专门设计用来存储不同数据类型元素集合
结构体与数组的对比:
> 数组:只能由多个相同类型的数据构成。
> 结构体:可以由多个不同类型的数据构成。
结构体内部的元素,也就是组成成分,我们一般称为"成员"。
结构体的一般定义形式为:
struct 结构体名{
类型名1 成员名1;
类型名2 成员名2;
……
类型名n 成员名n;
};
struct是关键字,是结构体类型的标志。
例如,定义一个Car
struct Car {
int wheels; // 轮子数
int speed; // 速度
};
定义结构体变量:
struct Car {
int wheels; // 轮子数
int speed; // 速度
}car;//直接定义变量
//单独定义结构体变量
struct Car car
6、结构体如何初始化?
答:初始化:
struct Car {
int wheels; // 轮子数
int speed; // 速度
}car;
car = {4,250};
//使用:
printf("%d",car.wheels);
7、结构体数组有哪3种定义方式?
答:
struct Student {
char *name;
int age;
};
struct Student stu[5]; //定义1
struct Student {
char *name;
int age;
} stu[5]; //定义2
struct {
char *name;
int age;
} stu[5]; //定义3
上面3种方式,都是定义了一个变量名为stu的结构体数组,数组元素个数是5。
初始化:
struct {
char *name;
int age;
} stu[2] = { {"MJ", 27}, {"JJ", 30} };
也可以用数组下标访问每一个结构体元素,跟普通数组的用法是一样的。
8、结构体有作用域注意点?
答:结构体类型的作用域
1> 定义在函数外面:全局有效(从定义类型的那行开始,一直到文件结尾)
2> 定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束)
不允许对结构体进行自身递归定义。
结构体内可以包含别的结构体。
只有在定义结构体变量时才会进行内存空间分配。
9、结构体与函数的注意点?
如果结构体作为函数参数,只是将实参结构体所有成员的值对应地赋值给了形参结构体的所有成员
修改函数内部结构体的成员不会影响外面的实参结构体
10、结构体和联合体的区别是啥?
答:struct和union都是由多个不同的数据类型成员组成的,但在任何同一时刻,union中只存放了一个被选中的成员,而struct的所有成员都存在。Struct中各成员都占有自己的内存空间,他们是同时存在的,一个struct变量的等于所有成员长度之和,在union中,所有成员不能占用它的内存空间,他们不能同时存在,union变量的长度等于最长的成员的长度。