C语言面试高频(二)

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值