01 三目运算符
三目运算符
:又称条件运算符,是计算机语言的重要组成部分。它是唯一有3个操作数的运算符,有时又称为三元运算符。一般来说,三目运算符的结合性是右结合的。
(a < b ? a : b ) = 1; //若a<b为真,则返回a = 1;若 a<b为假,则返回b = 1
*(a < b ? &a : &b ) = 1; //若a<b为真,将1写入a的地址中, a = 1,若 a<b为假,则返回b = 1
//(a < b ? &a : &b )返回一个地址,加上*相当于 *&a = 1, 或 *&b = 1;
02 const基本使用
const
: “一个不能被改变的普通变量” ,使得const在一定程度上提高程序的安全性和可靠性。
int const *p; // 指针本身不可改变(指针本身为常量) 可通过修改指针指向的内容(即:int s=1; p=&s)修改指针的值
int* const p; //指针所指向的内容不可改变(指针指向的值为常量) 可通过修改指针指向的值(即:*p=1)修改指针的值
const int* const p; //指针本身和指针所指向的内容都不可改变 不可修改(指针本身和指针指向的值都为常量)
//示例
#include<iostream>
using namespace std;
void main()
{
int s = 1;
int const* p1 = 0; //加入const 需进行初始化
int* const p2 = 0;
int const* const p3 = 0;
p1 = &s; //正确
//*p1 = 2 //错误
//p2 = &s; //错误
*p2 = 3; //正确
//p3 = &s; //错误
//*p3 = 4 //错误
}
03 引用
引用
:变量是一个别名,是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
引用分为普通引用和常量引用
Type& a = b;
int a;
int &b = a; //给a起一个别名为b,可以通过b修改a
普通引用
//示例1(普通引用:基础)
#include<iostream>
using namespace std;
void swap(int& x, int& y) //形参x,y为实参x,y的别名
{
int c;
c = x;
x = y;
y = c;
}
void main()
{
int x, y;
x = 1;
y = 2;
cout << x << " " << y << endl;
swap(x, y);
cout << x << " " << y << endl;
system("pause");
}
//示例2(普通引用:指针的引用)
#include<iostream>
using namespace std;
typedef struct Teacher
{
char name[20];
int age;
}Teacher;
int getTeacher(Teacher*& p) //指针的引用 Teacher* 是一个类型(相当于int) , 定义一个引用
{
if (p == NULL)
{
return 0;
}
p = (Teacher*)malloc(sizeof(Teacher)); //堆中创建一个临时空间(p为实参p1的别名)
p->age = 20;
}
int Free(Teacher* P) //释放指针所指向的内存空间
{
if (P == NULL)
{
return 0;
}
free(P);
}
void main()
{
Teacher* p1 = NULL;
getTeacher(p1); //在被调函数getTeacher中创建空间并赋值返回到主函数中
cout << p1->age << endl;
Free(p1);
system("pause");
}
常量引用
//示例3(常量引用(const):基础)
#include<iostream>
using namespace std;
void main()
{
int x = 1;
const int &y = x; // 让变量拥有只读属性 不能通过y修改x
//y = 2; //错误
const int &z = 10;
}
//示例4(常量引用(const)
#include<iostream>
using namespace std;
typedef struct Teacher
{
char name[20];
int age;
}Teacher;
void PrintTeacher(const Teacher& p) // 只能使用 不能修改
{
//p.age = 25; //错误
cout << p.age << endl;
}
void main()
{
Teacher x1;
x1.age = 20;
PrintTeacher(x1);
system("pause");
}
04 内联函数(inline)
//速度快(要求:01代码量小 02不能存在循环)
#include<iostream>
using namespace std;
inline void Line()
{
int x = 1;
cout<<x<<endl;
}
void main()
{
Line(); //调用内联函数
system("pause");
}
05 new和delete运算符
//new和delete与c语言中的malloc和free类似
//new:从堆中分配一块内存空间,返回首地址
//delete:释放堆中的内存空间
#include<iostream>
using namespace std;
class Node
{
public:
Node(int a)
{
A = a;
}
private:
int A;
};
void main()
{
//01分配基础类型
int* p1 = (int*)malloc(sizeof(int));
free(p1);
int* p2 = new int;
delete p2;
//02指定内存空间的大小
int* p3 = (int*)malloc(sizeof(int) * 20);
free(p3);
int* p4 = new int(20);
delete p4;
//03分配数组
int* p5 = (int*)malloc(sizeof(int) * 10);
free(p5);
int* p6 = new int[10];
delete[] p6;
//04分配对象
//malloc不会自动的执行构造函数 free不会自动的执行析构函数
//new自动的执行构造函数 delete自动的执行析构函数
Node* p7 = (Node*)malloc(sizeof(Node));
free(p7);
Node* p8 = new Node(10);
delete p8;
system("pause");
}
版权声明:本文为qq_44964491原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。