c++学习(一)指针初步
·
给变量起一个别名
本质上还是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) | 乱七八糟的任意值(比如 0x1100、0x00FF88) |
| 逻辑含义 | 我知道这里没有东西,特意指向“空” | 我不知道这里有没有东西,瞎指了一通 |
| 访问后果 | 必定崩溃(操作系统会拦截) | 可能不崩,可能崩,可能乱改数据(极度危险) |
| 好不好调试 | 好调试(崩溃时堆栈能定位到空指针) | 极难调试(程序诡异报错,甚至运行结果错误) |
| 产生原因 | 手动赋值为 NULL 或 nullptr | 1. 未初始化 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)
更多推荐
所有评论(0)