程序员面试宝典-1.基本数据结构

本文深入探讨了C++中的各种高级技巧,包括i++与++i的区别、switch语句的行为、X86平台上的字节序、类型转换注意事项、static与const的用法、内存对齐、sizeof与strlen的区别等,帮助开发者更好地理解和掌握C++。

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

1. ++i和i++

函数参数从右到左压栈,计算顺序也是从右到左。i++会产生未变化的临时变量i,再改变内存中的i为i+1。++i不产生临时量直接使用内存中的i。

        int i=1;
	
	switch (i++){
		default: break; 
		case 2: cout << "2" <<endl;
		case 1: cout << "1" <<endl;
		case 3: cout << "3" <<endl;
		
	} 
	/*output:
		1
		3
	*/

 

void f(int a, int b)
{
	
	cout << "i=" << a << endl;
	cout << "i=" << b << endl;
	return;
 } 
int main()
{
	int i=0;
        f(++i, i++);
	/*output:
		i=2
		i=0
	*/
	cout <<  endl; 
	i=0;
	f(i++, ++i); //右边i要等左边计算完使用使用内存中的i,而无临时变量
	/*output:
		i=1
		i=2
	*/
        return 0;
}

 

2.  比较语句使用:

 

char a;
'A' == a;

3. X86是小端模式:低地址存低字节;无论是多少位系统始终是一个地址指向一个字节

参数处理顺序,及类型转换

        unsigned int a = 0xfffffff7;
	unsigned char b = a;
	char c = a;
	printf("%08x, %08x", b, c);//printf默认输出int,所以类型会自动转化对于有符号数要注意符号继承
	/*
		000000f7, fffffff7
	*/
        unsigned char a=0xA5;
	unsigned char b=~a>>4+1;//~a时首先会把a转换为有符号int类型, + 优先级高于>>
	printf("%d\n", b);

4. C++中使用C语言为什么要声明,因为C++支持函数重载,所以函数被编出来的so文件命名方式和C不同。通过声明告诉编译器解决命名转换问题。

void f(int, int)
在C中可能编成 f.so
在C++中可能是 f_int_int.so

5. static和const

static变量必须初始化,如果静态成员数据设为私有可以通过共有static成员函数访问。

C++中建议使用const代替define, C中const成员仍能被改变。

const 常亮声明时,必须初始化

const int* a = &b;
int const *a = &b;
//前两个功能相同,表示a指向的内容不可变
int* const a = &b;//表示指针a不可再指向其他地方
const在函数前面表示返回值是const类型变量
class A
{
   public:
       int geta() const; //const函数表示不修改类中数据成员
   private:
       a = 1; 
};
int A::geta() const
{
    return a;
}


6. 对齐问题, 默认为结构中最大成员的整数倍

 

class A{
	public:
		double d;
		float a;
		int f;
		char c;
		A();
		~A();
	
};
int main()
{
	cout << sizeof(A);//输出为24而不是20
        return 0;
}

7. sizeof 和strlen

strlen的参数只能是char*, 而且必须以'\0'结尾,计算结果不包括'\0'。对函数取sizeof取的是返回值类型大小。数组名是固定的地址,返回所有成员使用内存大小。

        int** a[3][4];
	cout << sizeof(a)<<endl; //96 
	
	char *s1 = "1234";
	char s2[] = "1234";
	cout << sizeof(s1)<<endl;//8 s是指针,64位系统 
	cout << sizeof(s2)<<endl;//5
	
	string t[] = {"12", "3333", "434aaaaaaaaaaa3555"};
	cout << sizeof(t)<<endl;//24=3*8 看作二级指针
	cout << sizeof(string)<<endl;//8 64位系统 

 

 

内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值