当时场景
对话:
旁白:工作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\n",*p);
//printf("2=%d\n",*p++);
//printf("MIN = %d, *p = %d\n", 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;
小王:。。。
旁白:内心崩溃
宏并不是函数,宏并不是语句,宏并不是类型定义
宏并不是函数,宏并不是语句,宏并不是类型定义
宏并不是函数,宏并不是语句,宏并不是类型定义
对话:
老王建议:看看宏与 const 与 内敛函数区别?
小王提问:宏与const 不同东西,怎么有区别呢,对题目产生疑问?
旁白:一片汪洋大海,那是哪呀
老王:
#define MIN__TEST(a,b) ((a)<=(b)?(a):(b))
提示:变量和表达式有什么区别?
小王:
宏:判断2个数字大小 错误场景 (缺点:表达式作为参数)
一次循环i=1,变成i=3.和期望不符合
观察:
#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\n",*p);
//printf("2=%d\n",*p++);
//printf("MIN = %d, *p = %d\n", MIN__TEST(*p++, 10), *p);
return 0;
}
wan
指针是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++类中成员函数编译次序:
一次完成
2次完成
staic修饰是local
都存储在数据段, 全局变量、静态局部变量、静态全局变量都在静态存储区分配空间
但是范围不一样。
冲突怎么办?