c开发面试

本文介绍了C开发面试中常见的技术问题,包括判断系统字节序、数组与指针的区别、select与epoll的对比、memcpy的实现、C++中vector与list的差异、希尔排序的实现、GCC编译步骤、程序内存分区、结构体字节对齐、复数运算符重载、斐波那契数列的编写、重载与重写的概念,以及如何用宏定义计算一年的总秒数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c开发面试

1.编程验证大端还是小端

方法一:
void IsBigEndian()
{
	short int a = 0x1122;//十六进制,一个数值占4位  
	char b =  *(char *)&a;  //通过将short(2字节)强制类型转换成char单字节,b指向a的起始字节(低字节)
	if( b == 0x11)//低字节存的是数据的高字节数据
	{
	//  22 11 hex
		//是大端模式
	}
	else
	{
		//是小端模式
	}
}
方法二:
void IsBigEndian()//原理:联合体union的存放顺序是所有成员都从低地址开始存放,而且所有成员共享存储空间
{
	union temp
	{
		short int a;
		char b;
	}temp;
	temp.a = 0x1234;
	if( temp.b == 0x12 )//低字节存的是数据的高字节数据
	{
		//是大端模式
	}
	else
	{
		//是小端模式
	}
}

2.int *a[10],int (*a)[10]区别,sizeof(a)

int *a[10]是一个数组指针,a是一个数组,10个int型指针的数组 sizeof(a)=40
int (*a)[10] a是一个指针,指向10个int型的数组 sizeof(a)=4;

3.select和epoll的区别,编写核心的select过程,epoll的两种触发方式

4.memcpy的实现

void *memcpy(char *dst, char * src,unsigned int count)
{
if(dst==NULL || src==NULL)
	return;
while(count--){
	*dst++=*src++;
	}
}

5.C++ vector和list的不同

vector:
vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。
因此能高效的进行随机存取,时间复杂度为o(1);
但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。
另外,当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝。
list:
list是由双向链表实现的,因此内存空间是不连续的。
只能通过指针访问数据,所以list的随机存取非常没有效率,时间复杂度为o(n);
但由于链表的特点,能高效地进行插入和删除。

6.希尔排序实现

7.gcc的实现步骤

1.预处理,生成预编译文件(Gcc –E hello.c –o hello.i)
2.编译,生成汇编代码(Gcc –S hello.i –o hello.s)
3.汇编,生成目标文件(Gcc –c hello.s –o hello.o)
4.链接,生成可执行文件(Gcc hello.o –o hello)

8.程序内存的分区

代码区:存放函数体二进制代码
全局区:存放全局变量和静态变量
常量区:常量字符串,由系统自动释放
栈区:由编译器自动释放,存放函数的参数值和局部变量值。
堆区:一般由用户释放,存放使用new,malloc申请的变量

9.struct{int a;short b,int c,char d}
struct{int a;short b,char c,int d} 字节对齐
10.complex的+重载

11.斐波那契数列的实现

12.重载和重写的区别:

重载:函数名相同,函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同。函数返回值的类型可以相同,也可以不相同。发生在一个类内部。
重写:也叫做覆盖,一般发生在子类和父类继承关系之间。子类重新定义父类中有相同名称和参数的虚函数。
重写需要注意:
1、 被重写的函数不能是static的。必须是virtual的
2 、重写函数必须有相同的类型,名称和参数列表
3 、重写函数的访问修饰符可以不同。

13.使用宏定义 一年有多少秒

#define 365*24*60*60ul
unsigned long 强制转换,防止溢出
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值