01 黑马C++_基础语法入门

本系列博文将分享本人跟随黑马C++学习视频所整理的笔记,分享给大家一起学习,希望对大家有所帮助。该系列文章将列出一些比较关键、有用、易忘的知识点。
本文的使用方法:可以将本文作为一个工具书来使用,当编写程序或者阅读程序遇到不熟悉的知识点的时候,可以用 CTRL+F 按键 搜索关键词,查看该知识点。如:当忘记结构体定义方法,需不需要在括号后加分号,就可以 CTRL+F 搜索 “结构体”关键字,即可跳转到所需内容处。相较于使用 C++ Primer 感觉更加快速、便捷,希望对大家有所帮助。

请添加图片描述

一、C++基础编程

1.1 Visio Studio 创建新项目

  • 直接创建空项目,存放在 “C:\C++_Learning\Project_VS” 中
  • 创建文件,右击源文件-添加-新建项-main.cpp (F5 - 运行程序
#include <iostream>    // 输入输出流对象,包含 cin/cout 指令的头文件
using namespace std;   // 访问命名空间 std (包含C++标准程序库中定义所有标识符)
int main()
{
	cout << "hello world" << endl;

	system("pause");
	return 0;
}

1.2 注释

  • 单行注释:
// 我是注释
  • 多行注释:
/*
			主函数
	作为程序的入口,有且仅有几个
*/

1.3 常量

  • 定义常量的方法
#define Day 7            // 宏常量
const int month = 12;    // const修饰的常量

1.4 关键字

请添加图片描述

1.5 标识符

请添加图片描述

1.6 数据类型

1.6.1 整型

请添加图片描述

short 的取值范围为 -32768~32767,若令short值为32768,则输出的是-32768,即超过上限从下限开始

1.6.2 sizeof 统计数据类型所在内存大小

sizeof(short) = 2; sizeof(int) = 4; sizeof(long) = 4;

1.6.3 实型(浮点型)

请添加图片描述

  • 小数点前面也算有效数字,比如 3.14 含有三个有效数字
  • 需要在常量后面加个f,才能表示单精度
float a = 3.14f;   // 如果不加f,程序还需要自己将double转为float再赋值a
  • C++的 cout 输出小数默认六位有效数字

1.6.4 科学计数法赋值

int a = 3e2;   // 表示3×10^2,即300

1.6.5 字符型

char ch = 'a';
cout << ch << endl;			// a    A    
cout << (int)ch << endl;	// 97   65 
  • char 字符型只占用一个字节
  • 内存中存储字符对应的 ASCLL 码

1.6.6 转义字符

请添加图片描述

cout << "hello world\n";
cout << "aa\t" << "hello" << endl;		// aa     hello   aa加上\t 一共占8个位
cout << "aaaa\t" << "hello" << endl;	// aaaa   hello   aaaa加上\t 一共占8个位

1.6.7 字符串型

  • C风格字符串
chat str[] = "hello world";
  • C++风格字符串
string str2 = "world";

1.6.8 布尔类型

bool flag = true;
  • 占1个字节大小

1.6.9 数据的输入

int a = 0;
cout << "请输入a的数据" << endl;
cin >> a;

1.6.10 随机数

#include <ctime>
srand((unsigned int)time(NULL));	// 随机数种子
int num = rand() % 100 + 1;			// rand%100 -> 0~99随机数 ; +1 -> 1~100随机数

1.7 程序流程结构

1.7.1 三目运算符

  • 表达式1 ? 表达式2 : 表达式3
(a > b ? a : b) = 100;    // a 和 b 谁大谁赋值为100

1.7.2 continue

  • 在一次循环中,跳过本次循环余下未执行语句,进行下一次循环

1.7.2 goto

cout << "1 " << endl;
goto FLAG:
cout << "2 " << endl;
FLAG:
cout << "3 " << endl;

1.8 数组

1.8.1 一维数组

请添加图片描述

  • 数组名即为数组在内存中的首地址
int arr[5] = { 1, 2, 3, 4, 5 };
cout << sizeof(arr) << endl;        // 4 * 5 = 20
cout << arr << endl;                // 000000975494F9C8 (地址) 等价 &arr[0]

1.8.2 二维数组

请添加图片描述

  • 数组名即为二维数组首地址

1.9 函数的份文件编写

  1. 创建 .h 头文件
  2. 创建 .cpp 源文件
  3. 在头文件中写函数的声明
  4. 在源文件中写函数的定义
// swap.h
#pragma once
#include <iostream>
using namespace std;

void swap(int num1, int num2);
// swap.cpp
#include "swap.h"
void swap(int num1, int num2)
{
	int temp;
	temp = num1;
	num1 = num2;
	num2 = temp;
}

1.10 指针

  • 存放变量的地址

1.10.1 指针的定义

指针的类型需要与变量的类型一致

int a = 10;
int* p = &a;           // & 为取地址符
cout << *p << endl;    // 10
int* p1 = NULL;        // 空指针,指向内存占编号为0的空间
cout << sizeof(p) << endl;  // 8/4 
  • 64位操作系统(VS上面的Debug选择x64)指针占8字节
  • 32为操作系统(VS上面的Debug选择x86)指针占4字节

1.10.2 const修饰的指针

const int* p = &a;        // 常量指针,值不可以改
int* const p = &a;        // 指针常量,指针指向不可以改
const int* const p = &a;  // 既修饰指针,又修饰常量,都不可以改

1.10.2 指针地址传递变量

void new_Swap(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}
new_Swap(&a, &b);    // a 与 b 的值发生交换

1.10.3 指针地址传递数组

void sort(int* array, int len);     // 两种方法都可以
void sort(int array[], int len);    // 两种方法都可以

1.11 结构体

1.11.1 结构体定义

struct Student
{
	string name;
	int age;
}stu3;                       // 结构体变量创建方式3
struct Student s1;           // 结构体变量创建方式1(struct可以省略)
s1.name = "张三";
s1.age = 12;
Student s2 = {"李四", 18};   // 结构体变量创建方式2

1.11.2 结构体数组

Student stu[2] = {{"王五", 15}, {"王六", 16}};

1.11.3 结构体指针

Student* p = &stu;
cout << p->name << '\t' << p->age << endl;

1.11.4 结构体嵌套

struct Teacher
{
	string name;
	int id;
	Student stu;
};
Teacher t1 = { "王老师", 123, {"张三", 16}};

1.11.5 结构体作为函数参数

  • 值传递
void printStu(Student stu) { ... }
printStu(s1);
  • 地址传递
void printStu1(const Student* stu) { ... }
printStu1(&s1);

值传递函数传递的是值,会拷贝结构体中的所有数据,占用内存空间多,节省内存空间的方法即:使用地址传递。此时函数传递的是地址,是一个指针,占用字节少,且不会复制一个新的副本出来。
地址传递时,在指针形参前加上 const ,可以防止误操作修改了实参的值。

至此,C++基础语法入门文章已更新完毕,下篇将更新 C++ 核心编程语法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_小猪沉塘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值