const & define
#include "stdafx.h"
#define HAHAHA "我是这个世界上最可爱的人大大A"+1234342
int main()
{
#define NUM 100
printf("%d", NUM);// printf("%d", 100);
#undef NUM
// error
printf(HAHAHA);
// 1.const在数组中的使用
const int b = 12;
// C:error C++ right
int arr[b] = {};
// 2. const本身的使用
// 必须初始化
const int a = 10;
// 初始化后不能被重新赋值
//a = 20;
*(int*)&a = 20;
printf("%d", a);
// 和下面相同
printf("%d", 10);
int nNumb = a;
// 和下面的相同
int nNumC = 10;
int c = *(int*)&a;
printf("c = %d", c);
// 3. 修饰指针的时候
int nNumA = 100;
// *p1不允许被赋值
const int *p1;
p1 = &nNumA;
// *p1是const 不能被赋值
//*p1 = 100;
nNumA = 200;
int cnNum = 100;
// p2不允许被赋值
int * const p2 = &cnNum;
return 0;
}
=======================
// 01.enum.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
enum SEASON {
// 默认从0开始,后面的值是前面的值+1
spring=9,summer=10,autumn,winter
};
#define SPRING 9
#define SUMMER 10
#define AUTUMN 11
#define WINTER 12
// 我这个FUN的参数a 只能是9~12
void FunTest(SEASON a) {
switch (a) {
case SPRING:
printf("春\n");
break;
case SUMMER:
printf("夏\n");
break;
case AUTUMN:
printf("秋\n");
break;
case WINTER:
printf("冬\n");
break;
default:
break;
}
}
int main()
{
// 只占4个字节
printf("sizeof(SEASON) = %d\n", sizeof(SEASON));
FunTest(spring);
// error
//FunTest(9);
return 0;
}
============================
// 02.内联函数和define.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
// 有参宏
#define MAX(a,b) a>b?a:b
// 内联函数
inline int Max(int a, int b) {
return a > b ? a : b;
}
int main()
{
int a = 10, b = 20;
int c = MAX(a, b);
// 编译时替换成:
int c1 = a > b ? a : b;
// 结果不确定
int d = MAX(a++, b);
// 编译时替换成
int d1 = a++ > b ? a++ : b;
int d2 = Max(a++, b);
return 0;
}
===============================
// 03.内存申请和释放.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
int main()
{
// C:
// 返回的是无类型的指针
int *p2;
int *p = (int*)malloc(100*sizeof(int));
ZeroMemory(p, 100 * sizeof(int));
free(p);
p = nullptr;
// c++
// new 什么类型的内存[多少份]
// 返回类型取决于new的类型
// 可以申请的时候同时初始化
int *p3 = new int[100]{1,2,3,4,5};
delete[] p3;
// delete什么时候带[]什么时候不带[]->看new有没有[]
int *p4 = new int(5);
delete p4;
int *p5 = new int[100];
delete[] p5;
return 0;
}
========================
// 04.函数重载.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
char Fun(int a) {
printf("%d\n", a);
}
//int Fun(int a) {
// printf("%d\n", a);
//}
void Fun(char b) {
printf("%c\n", b);
}
int main()
{
Fun(10);
Fun('a');
return 0;
}
========================
// 05.函数默认参数.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
void Fun(int a, int b);
void Fun(int a = 10,int b=20) {
printf("%d", a);
}
void Fun1(int a = 10);
void Fun1(int a) {
printf("%d",a);
}
// error!
void Fun2(int a = 10);
void Fun2(int a = 10) {
printf("%d", a);
}
void Fun() {
printf("void\n");
}
int main()
{
Fun(10,20);
// Fun();
//Fun();
return 0;
}
=================
// 06.引用.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
void MySwap( int &nNumA, int &nNumB) {
int temp = nNumA;
nNumA = nNumB;
nNumB = temp;
}
int main()
{
int a = 10;
int c = 20;
// 定义a的引用b
// 引用的定义和const一样,必须初始化
// 初始化后对b的使用都是对a的操作
// 引用是从一而终的,不能再引用别人
int &b = a;
// 下面这个是取地址,不是让b变为c的引用
// &b = c;
// 什么时候表示引用,什么时候表示取地址
// 当&和类型在一起的时候表示引用
// 当&和变量在一起的时候表示取地址
// 引用的使用
int nNumA = 10, nNumB = 20;
MySwap(nNumA, nNumB);
const int nNumC = 0;
const int &a = nNumA;
const int &b = nNumC;
int &c = nNumC;
c = 100;
return 0;
}
============================
// 07.类型转换.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int main()
{
// C的强制转换
int a =10;
int *p = &a;
int nAddr = (int)p;
// C的隐式类型转换
int nNumA = 'a';
// C++
//const_cast<>;
//reinterpret_cast<>;
//static_cast<>;
//dynamic_cast<>;
// 转换方式<转换后的类型>(被转换的值)
// 1. const_cast<> 去常量类型转换
const int nNumB = 10;
int &nNumC = const_cast<int&>(nNumB);
// 对应C的强制类型转换
int &nNumD = (int&)nNumB;
// 2. reinterpret_cast<>
int nNumE = 10;
int nAddrE = reinterpret_cast<int>(&nNumE);
// 对应于C的强制类型转换
int nAddrF = (int)&nNumE;
// 3. static_cast<> 对应于C的隐式类型转换
int nNumF = static_cast<int>('a');
return 0;
}
=========================
// 08.输入输出.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
//cout << 1 << 'a' << 1.2;
cout << hex<<setw(10) <<setfill('*')<< 12345;
return 0;
}