1、什么是静态变量和全局变量?它们有什么区别?
静态变量和全局变量都是在程序运行期间存储在静态存储区域的变量,它们的生命周期与程序的运行周期相同,但是它们的作用域不同。
- 全局变量是定义在函数外部的变量,可以被程序中的所有函数访问。它们在程序启动时被分配内存,在程序结束时被释放。
- 静态变量可以定义在函数内部或者全局范围内,但它们的作用域仅限于定义它们的函数或文件。静态变量在程序启动时被初始化,只分配一次内存,生命周期与程序相同。
区别:
- 作用域不同:全局变量的作用域是整个程序,而静态变量的作用域是定义它们的函数或文件。
- 生命周期不同:全局变量在程序启动时被初始化,在程序结束时被释放;静态变量也在程序启动时被初始化,但是只分配一次内存,在程序结束时才会被释放。
2、C语言中的类型转换有哪些方式?请列举几个常用的类型转换方式。
C语言中的类型转换方式包括:
- 隐式类型转换:由编译器自动进行的类型转换,例如将整数赋值给浮点数变量。
- 显式类型转换:由程序员显式指定的类型转换,可以使用类型转换运算符
(type)
或者相关的转换函数来实现。
常用的类型转换方式包括:
- 整数类型之间的转换,如
int
转换为long
、short
转换为int
等。 - 浮点数类型之间的转换,如
float
转换为double
、double
转换为float
等。 - 指针类型之间的转换,如将一个指针转换为另一个类型的指针。
3、什么是指针的指针?请解释指针的指针的作用。
指针的指针是指指向指针变量的指针,也就是说它存储的是指针变量的地址。指针的指针可以用来间接地访问或修改指针所指向的内存地址,提供了更灵活的内存管理方式。
指针的指针的作用:
- 可以用于动态内存分配,例如在函数中通过指针的指针来修改指针的值,从而实现在函数外部动态分配内存。
- 可以用于实现多级数据结构,例如多级链表或者树等。
4、C语言中的位操作有哪些函数?请列举几个常用的位操作函数。
C语言中的常用位操作函数包括:
&
:按位与运算,将两个操作数的对应位进行与操作。|
:按位或运算,将两个操作数的对应位进行或操作。^
:按位异或运算,将两个操作数的对应位进行异或操作。~
:按位取反运算,将操作数的每一位取反。
5、如何在C语言中实现多态性?请举例说明。
在C语言中实现多态性可以通过函数指针和结构体来实现。例如:
#include <stdio.h>
// 定义一个动物结构体
struct Animal {
const char* (*speak)();
};
// 定义猫的行为函数
const char* cat_speak() {
return "Meow!";
}
// 定义狗的行为函数
const char* dog_speak() {
return "Woof!";
}
int main() {
// 定义动物指针
struct Animal* animal;
// 定义猫和狗的结构体实例
struct Animal cat = {cat_speak};
struct Animal dog = {dog_speak};
// 指向猫的结构体实例的指针
animal = &cat;
printf("Cat says: %s\n", animal->speak());
// 指向狗的结构体实例的指针
animal = &dog;
printf("Dog says: %s\n", animal->speak());
return 0;
}
在这个例子中,通过定义一个动物结构体,并将不同种类动物的行为函数赋值给结构体的成员,实现了多态性。通过修改动物指针指向不同种类的动物实例,可以调用相应的行为函数,实现了动态多态性。