C语言面试高频(二)
1.结构体和共用体的区别
1.定义
结构体:
- 成员在内存中独立存储,每个成员占用独立的内存空间。
- 内存占用是成员之和,每个成员都占用独立的空间。
- 成员可以同时被访问,通过成员名字来访问。
- 适合存储和处理多个不同类型的数据,如员工信息、图形对象等。
共用体:
- 成员共享同一块内存空间,只能存储一个成员的值。
- 内存占用是最大成员的大小,所有成员共享该空间。
- 成员只能同时访问其中的一个,存取时要明确指定。
- 适合存储和处理只使用其中一种类型的数据,可以节省内存空间或进行数据类型转换。
2.举例(便于理解)
#include <stdio.h>
struct MyStruct {
int x;
float y;
};
union MyUnion {
int a;
float b;
};
int main() {
struct MyStruct myStruct;
union MyUnion myUnion;
printf("结构体的大小: %zu 字节\n", sizeof(myStruct));
printf("共用体的大小: %zu 字节\n", sizeof(myUnion));
return 0;
}
结构体的大小: 8 字节
共用体的大小: 4 字节
2.简述C++有几种传值方式之间的区别⭐
值传递(pass by value):参数以值的方式传递给函数,函数内部对参数的修改不会影响到原始数据。函数会创建参数的副本,在函数的作用域内使用副本进行操作。常用于传递简单类型的参数。
#include <iostream>
void modifyValue(int x) {
x = 10;
}
int main() {
int num = 5;
modifyValue(num);
std::cout << "原始值: " << num << std::endl;
return 0;
}
输出结果:原始值: 5
引用传递(pass by reference):参数以引用的方式传递给函数,函数内部对参数的修改会影响到原始数据。函数直接操作原始数据,没有创建副本。可以用于传递任意复杂类型的参数,比如对象或容器。
#include <iostream>
void modifyValue(int& x) {
x = 10;
}
int main() {
int num = 5;
modifyValue(num);
std::cout << "修改后的值: " << num << std::endl;
return 0;
}
输出:修改后的值: 10
指针传递(pass by pointer):参数以指针的方式传递给函数,函数内部可以通过指针来访问和修改原始数据。函数通过指针间接操作原始数据,需要注意空指针和指针的解引用。可以用于传递需要动态分配内存的参数,或者需要返回多个值的情况。
#include <iostream>
void modifyValue(int* x) {
*x = 10;
}
int main() {
int num = 5;
modifyValue(&num);
std::cout << "修改后的值: " << num << std::endl;
return 0;