给变量起一个别名

本质上还是int类型,更方便,更易读

typedef int feet;
feet distance;

末尾不加f,那么就会识别为double类型

float ff = 3.14f;

显示转换

int i=10;
float f = static_cast<float>(i);

%取模运算 

当10%20结果为0  两个小数不能取模运算

随机数种子

利用当前系统时间生成随机数,防止每次随机数都一样

系统生成随机数

srand((unsigned)time(NULL));
int random_value = rand();
printf("原始随机数: %d\n", random_value);
int dice = rand() % 100 + 1;
printf("1~100之间的随机数: %d\n", dice);

分文件编写

创建头文件 swap,在主文件中#include "swap.h"

#include "swap.h"

void swap(int a, int b) {
	int temp = a;
	a = b;
	b = temp;
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;

}

定义指针

int a = 10;

指针定义的语法 :数据类型*指针变量名

int* p;

让指针记录变量a的地址

p = &a;
cout << "a的地址为" << &a << endl;
cout << "指针p为:" << p << endl;

使用指针 

    可以通过解引用的方式来找到指针指向的内容
    指针前加*代表解引用,找到指针执行的内存中的数据

*p = 1000; 
cout << "a="<< a << endl;
cout << "*p=" << *p << endl;

空指针 

空指针指向内存中编号为0的空间 空指针指向的变量是不可以访问的

初始化指针变量

int* p = NULL;

野指针

访问野指针报错

空指针和野指针都不要去访问,不是我们自己申请的空间

int* p =(int *) 0x1100;
对比维度空指针 (Null Pointer)野指针 (Wild Pointer)
指针里的值明确为 0(比如 0x00000000乱七八糟的任意值(比如 0x11000x00FF88
逻辑含义知道这里没有东西,特意指向“空”不知道这里有没有东西,瞎指了一通
访问后果必定崩溃(操作系统会拦截)可能不崩,可能崩,可能乱改数据(极度危险)
好不好调试好调试(崩溃时堆栈能定位到空指针)极难调试(程序诡异报错,甚至运行结果错误)
产生原因手动赋值为 NULL 或 nullptr1. 未初始化
2. 访问越界
3. 释放后未置空(悬垂指针)

const 修饰指针

常量指针

    指针的指向可以修改,但是指针指向的值不可以改。

*p=20 错误不可以改  
p=&b 正确  指针指向

指针常量

 指针的指向不可以修改,但指针指向的值可以改

int* const p = &a;

const修饰常量和指针

指针的指向不可以修改,指针指向的值也不可以改

指针++的操作

指针进行偏移。

p++;//指针进行偏移。

函数传递数组

要传递数组头节点和传递数组长度

结构体

结构体定义
struct Student1
{

	string name;
	int age;
	int score;
	
};

C++ 规定:在函数体内(比如 main 的花括号 { } 内)定义的结构体,叫做“局部类”(Local Class)

const用来防止误操作

结构体变量创建

结构体变量创建
	 struct Student1 s1;
	 s1.name = "shan";
	 s1.age = 18;
	 s1.score = 200;
	 struct Student1 s2 = {"shan",23,300};
	 定义结构体时创建结构体变量
	 struct Student
	 {
		 //成员列表

		 string name;
		 int age;
		 int score;
		 //

	 }s3;

结构体指针

用指针访问结构体中的成员属性是通过->去实现

struct Student1 * p1 = &s1;struct可省略
cout << p1->name;

函数地址传递

int a;
int b;
swap(&a, &b);
void swap(int* p1, int* p2)
{
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

左值可以用取地址符 & 获取内存地址的表达式(即“有身份”)

右值不可以对表达式取地址(因为它是临时值,即将被销毁)。

结构体地址传递
void printStudent2(const Student1* p)

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐