c++该怎么学习(面试吃土记)
2023-03-15 21:59:58 时间
当时场景
对话:
旁白:工作3-5年,去面试 c++
面试官:你对c++比较了解吗?
小王:对的
旁白:自信满满
面试官:咱们来几个c++题目
- 打印输出结果?
#include <stdio.h>
#define MIN__TEST(a,b) ((a)<=(b)?(a):(b))
int main()
{
int arry[5] = {10,20,30,40,50};
int *p = &arry[0];
//printf("1=%d
",*p);
//printf("2=%d
",*p++);
//printf("MIN = %d, *p = %d
", MIN__TEST(*p++, 10), *p);
return 0;
}
- 打印输出结果:
float a = 1.0f;
std::cout << (int)a << std::endl; //1
std::cout << (int&)a << std::endl;//????/
std::cout << std::boolalpha << ( (int)a == (int&)a ) << std::endl;
小王:。。。
旁白:内心崩溃
知识点1 :#define 宏的优缺点
宏并不是函数,宏并不是语句,宏并不是类型定义
宏并不是函数,宏并不是语句,宏并不是类型定义
宏并不是函数,宏并不是语句,宏并不是类型定义
对话:
老王建议:看看宏与 const 与 内敛函数区别?
小王提问:宏与const 不同东西,怎么有区别呢,对题目产生疑问?
旁白:一片汪洋大海,那是哪呀
老王:
- 宏可以修饰常量 const修饰常量 相同点。 #define Pi 3.1415926 const double =3.1415926;(编译时候,只读操作const做替换)
- 宏代替函数,内敛函数也是函数 相同点,那相同点呢?
#define MIN__TEST(a,b) ((a)<=(b)?(a):(b))
提示:变量和表达式有什么区别?
小王:
- 预处理命令:不直接编译,不作类型检查,做一些不符合c++语法 替换工作 (优点)
- 提高程序的运行效率(优点,避免函数调用)
- 宏不会检查错误,const会检查错误(缺点)
宏:判断2个数字大小 错误场景 (缺点:表达式作为参数)
一次循环i=1,变成i=3.和期望不符合
观察:
- 上面是一个函数,循环遍历 ,然后通过宏max比较大小
- i++,写在宏里面导致,i做2次++,从1变成3.(旁白:错误了) bigest =max(2>2?2:3)
- 如何写出正确宏
答案:20 30 想想这是为什么
#include <stdio.h>
#define MIN__TEST(a,b) ((a)<=(b)?(a):(b))
int main()
{
int arry[5] = {10,20,30,40,50};
int *p = &arry[0];
//printf("1=%d
",*p);
//printf("2=%d
",*p++);
//printf("MIN = %d, *p = %d
", MIN__TEST(*p++, 10), *p);
return 0;
}
wan
考点2:虚拟内存地址与指针类型
指针是C语言的灵魂。想要学好指针,我们就要先从内存地址学起。
内存地址是内存当中存储数据的一个标识,并不是数据本身,通过内存地址可以找到内存当中存储的数据
- 小王提问:
内存地址不就是一串十六进制表示的数字么(其实底层都是二进制),哪来的什么类型一说呢, 为什么又需要类型呢?
尝试回答:
#include <stdio.h>
#include<iostream>
using namespace std;
int main()
{
float a = 1.0f;
std::cout << (int)a << std::endl; //1
std::cout << (int&)a << std::endl;//1065353216
std::cout << std::boolalpha << ( (int)a == (int&)a ) << std::endl; //false
float b = 0.0f;
std::cout << (int)b << std::endl; //0
std::cout << (int&)b << std::endl; //0
std::cout << std::boolalpha << ( (int)b == (int& )b ) << std::endl;//true
return 0;
}
1地址
0地址
库的:链接与加载。
探究C++类成员函数的编译次序
- C语言函数编译次序:从上到下依次编译,当遇到在函数内部使用的其他函数名字时,将会在此函数之前查找,若有函数声明或者定义则编译成功,反之编译失败。
- C++类中成员函数编译次序:1.首先编译成员的声明。2.直到类全部可见后才编译函数体。
C语言函数编译次序
C++类中成员函数编译次序:
一次完成
2次完成
全局符号和本地符号
staic修饰是local
- 小王疑问:静态局部变量和普通全局变量以及静态全局变量的区别?https://www.zhihu.com/question/37029880
- C++ 可重定位目标模块(即. o 文件)中有个符号表,包含本模块所有定义和引用的符号信息。符号又分为全局符号和本地符号两种。
- 全局符号指本模块定义的非静态函数和全局变量,其他模块可见,可以供其他模块使用。
- 本地符号指静态函数和静态变量,只能供本模块使用,其他模块不可见。使用 readelf 命令可以查看一个符号是本地还是全局。
都存储在数据段, 全局变量、静态局部变量、静态全局变量都在静态存储区分配空间
但是范围不一样。
- 符号冲突怎么办?
冲突怎么办?
相关文章
- 一篇运维老司机的大数据平台监控宝典(2)-联通大数据集群平台监控体系详解
- 一篇运维老司机的大数据平台监控宝典(1)-联通大数据集群平台监控体系进程详解
- 空中换引擎 博时基金数字化转型经验谈
- 如何高效地学习编程语言
- 作为一名阿里巴巴数据分析大牛,送给学弟学妹的经验积分
- 为什么要学习R语言
- Hadoop大数据分析平台的介绍性讨论
- 最全面的Spring学习笔记
- 16个用于数据科学和机器学习的顶级平台
- 给有抱负的数据科学家的六条建议
- 如何做一枚合格的数据产品经理
- 除Kaggle外,还有哪些顶级数据科学竞赛平台
- 一个鲜为人知却可以保护隐私的训练方法:联合学习
- 干货 :送你12个关于数据科学学习的关键提示(附链接)
- 大数据行业有多少种工作岗位,各自的技能需求是什么?
- 中国移动研究院常耀斌:商用大数据平台的研发之路
- 这些数据科学家必备的技能,你拥有哪些?
- 自学成才的开发者有何优势和劣势?
- Gartner报告:正处于数据科学与机器学习工具 “大爆炸”的时代
- Ready Computing借助InterSystems IRIS医疗版为医疗机构提供具有高度互操作性和可扩展性的解决方案