C++学习笔记1——入门篇

入门

学习教程:https://www.imooc.com/learn/342

  1. 进制:
cout<<oct<<x<<endl;  //八进制
cout<<dec<<x<<endl;  //十进制
cout<<hex<<x<<endl;  //十六进制
  1. bool值
cout<<boolalpha<<y<<endl;  //y为bool型,以布尔方式将值输出
  1. namespace
#include <stdlib.h>
#include <iostream>
using namespace std;  //用std命名空间是为了用cin和cout

namespace A
{
	int x=1;
	void fun()
	{
		cout<<"A"<<endl;
	}
}
namespace B
{
	int x=2;  //与namespaceA有相同的变量名
	void fun()  //与namespaceA有相同的函数名
	{
		cout<<"B"<<endl;
	}
}
	void fun2()  //与namespaceA不同的函数名
	{
		cout<<"2B"<<endl;
	}
}

using namespace B:  //未指定的情况下默认使用namespaceB

int main()
{
	cout<<A::x<<endl;  //输出namespaceA下定义的变量x
	B::fun();  //调用namespaceB下的函数fun()
	fun2();  //该函数只在B中有定义,在A中没有,无冲突,前面说了默认使用B的,不用再加  B::
	return 0;
}

入门2

教程:https://www.imooc.com/learn/381

别名

在这里插入图片描述
对b进行更改,a也会随之更改,以上输出结果是10不是3
在这里插入图片描述

指针类型的引用

在这里插入图片描述
*q = 20相当于 *p = 20 相当于a = 20
cout a得20
因为q是p的别名,p指向a

引用作函数参数

在这里插入图片描述
左边是用普通方法进行a、b的交换,右边是用引用

引用 举例:

int main()
{
	int a = 10; //没有这句是不成立的,不能只有别名
	int &b = a; //b是a的别名
	b = 20; //此时a也是20
	cout << a << endl; 
	a = 30; // 此时b的值也是30
	cout << b << endl; 
	return 0;
}

引用 举例(结构体):

typedef struct
{
	int x;
	int y;
}Coord;

int main()
{
	Coord c;
	Coord &c1 = c; //c1是c的别名
	c1.x = 10;
	c1.y = 20; //c相应的x和y也变为10和20
	cout << c.x <<" , " << c.y << endl; 
	return 0;
}
	

引用 举例(指针):

int main()
{
	int a = 3;
	int *p = &a;
	int *&q = p;

	*q = 5;
	cout << a << endl; //输出的a为5
}

引用 举例(函数):

void fun(int &a, int &b)
{
	int c = 0;
	c = a;
	a = b;
	b = c;
}

int main()
{
	int x = 10;
	int y = 20;
	cout << x <<" , " << y << endl;
	fun(x,y);
	cout << x <<" , " << y << endl;
	return 0;
}

结果:x,y值交换

const

在这里插入图片描述
在这里插入图片描述
第三句(const 在 * 后)跟前两句(const在 * 前)有区别

在这里插入图片描述
在这里插入图片描述
const修饰的是 *p ,所以p可以改变, *p 不能
在这里插入图片描述
const修饰的是p
在这里插入图片描述
前后都有const,p和 *p 都不能改
在这里插入图片描述
const int x = 3; int *y = &x;” (X)
用可变的指向不可变的(用权限大的指向权限小的),是不允许的
可改为const int const *y = &x ,也可以改为 int const *p = &x;
int x = 3; const int *y = &x;” (√)
用权限小的指向权限大的,是允许的

举例:

int main()
{
	const int x = 3;
	//x = 5; //这句话是错的,x不能修改
}

在头文件写#define X 3 效果一样,但没有类型定义,且是宏编译,计算机不会检查语法错误

举例(用指针):

int main()
{
	int x = 3;
	int const *p = &x; //相当于 : const int *p = &x;
	//*p = 5; //此句会报错
	x = 5; //此句可以通过
	
	int y = 5;
	int *const q = &y;
	//q = &y; //const修饰的是q,此句会报错
	*q = 20; //是对的,可以通过*p对y进行修改
	cout << y << endl; //输出为20
	
	int z = 3;
	int a = 1;
	int const *s = &z;
	cout << *s << endl; //此句输出3
	s = &a;
	cout << *s << endl;//此句输出1
	
	int b = 3;
	int c = 5;
	int const &d = b; //引用d不可改,b还可以改
	//d = 10; //如果上句没有const,则可通过,输出10。但上句加了const,此句错
 	

举例(用函数):

void fun (const int &a,const int &b)
{
	a = 10;
	b = 20;
}
int main()
{
	int x = 3;
	int y = 5;
	fun (x,y); //如果函数形参不加const,则没有错误,此句使x=10,y=20。但加了const,则不通过,fun内不能给形参赋值

函数参数默认值

在这里插入图片描述

函数重载

在这里插入图片描述

内联函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
举例(函数参数默认值、函数重载):

void fun (int i=10, int j=20, int k=30);
void fun (double i,double j);

int main()
{
	fun(); //全部都是默认值
	fun(100); //i=100,其余默认值
	fun(100,200); //i=100,j=200,k为默认值
	fun(100,200,300); //i=100,j=200,k=300

	fun(1.1,2.2); //两个参数都是double型,判断是使用重载函数
	fun (1,2); //两个参数都是int型,判断是使用第一个fun函数
	return 0;
}

void fun(int i, int j, int k)
{
	cout << i << " " << j << " " << k << endl;
}
void fun(double i, double j)
{
	cout << i << " " << j << endl;
}

内存管理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
举例:

int main()
{
	int *p = new int(20);
	//或:int *p = new int;  *p = 20;
	if (p == NULL)
	{
		return 0;
	}
	cout << *p << endl;
	delete p;
	p = NULL;


	int *q = new int[1000];
	if (q == NULL)
	{
		return 0;
	}
	p[0] = 10;
	p[1] = 20;
	cout << q[0] << " " << q[1] << endl;
	delete []q; //如果没有[],则只释放数组第一个数的空间
	q = NULL;
	
	return 0;
}

举例使用:

#include <string.h>
#include <iostream>
using namespace std;
int main(void)
{
    //在堆中申请100个char类型的内存
    char *str = new char[100];
    //拷贝Hello C++字符串到分配的堆中的内存中
	strcpy(str, "Hello imooc");
    //打印字符串
    cout << str << endl;
    //释放内存
	delete []str;
    str = NULL;
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值