c++基础( 小知识点)

  • Post author:
  • Post category:其他




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 版权协议,转载请附上原文出处链接和本声明。