第五次笔记(C++ 指针专讲)

57.初识指针(进阶 指针就是变量)
理解指针的基本概念
指针变量
理解指针和数组的关系 增加对内存和栈内存的讲解
使用指针操作数组
指针就是一个变量,指针(pointer)是一个值为内存地址的变量(或数据对象)cpu访问地址(变量名可以重复,可以和人的名字和身份证号码进行对比,国家相当于CPU。变量名相当于助记符;地址是操作系统分配的)用变量名的效率高,直接获取数据所以效率高。
指针的安全机制不太好。(不算是高级语言,底层语言)
基本用法:数据类型 *指针变量名 int *a;
主要是人们记不住地址值所以用到变量
注意:
(1)int * p的写法入托偏向于地址,就是前者,即p就是一个地址变量,表示一个十六进制地址(声明定义)
(2)如果偏向于后者,就是偏向于值,*p是一个整形变量,能够表示一个整形值(建议两者相结合进行理解)
(3)声明中的 *和使用中的 *含义是不同的

58.指针使用示例
一讲到指针就想到地址
int num = 1024;
int * ptr_num;
//取num变量的地址赋值给ptr_num
ptr_num = #
ptr_num指向于num

*ptr_num = 1111;取值
跟num = 1111;一模一样
取地址的方便找到地址后更改变量值
给指针赋值只能用&符号

#include<iostream>

using namespace std;

int main()
{
    double num = 1024.5;
    //声明一个指针,指向num变量
    double* ptr_num = &num;
    cout << "ptr_num的值:" << ptr_num << endl;
    cout << "ptr_num指向空间的值是:" << *ptr_num <<endl;
    return 0;
}

思考一个问题:打印关于字符的结果是什么

#include<iostream>

using namespace std;

int main()
{
    char ch = 'a';
    char * ptr_ch = &ch;
    //思考打印结果是什么?
    cout << ptr_ch <<endl;
    return 0;
}

char * str = “老九君你真坏”;默认为是指针型
解决办法,强转成void(void *),任意类型的指针

59.常见指针类型
空指针(null pointer)
空指针不指向任何对象,在试图使用一个之战之前可以首先检查是否为空
指针最危险的就是,对于指针定义时候不给赋初值,会出现乱的指针(可能会是电脑的核心地址,叫做野指针)
用法:int *ptr1 = nullptr;//等价于 int ptr1 = 0;
int
ptr2 = 0;

//需要包含cstdlib
int * ptr3 = NULL;//等价于int *ptr3 = 0;
存在安全性问题,强烈建议初始化所有的指针 ,并在可能的情况下,尽量等定义了对象之后再定义指向它的指针

void※ 指针
一种特殊的指针类型,可以存放任意对象的地址
double num = 3.14; double * ptr_num1 = &num; void *ptr_num2 = &num; cout <<(ptr_num1 == ptr_num2) <<endl;
结果1(true)打印成bool类型,cout<<boolalpha;
但是void*类型不可以修改值,一般用来和别的类型进行比较

60.引用
为对象齐了另外的一个名字(应用及别名)

int int_value = 1024;
    //refValue指向int_value,是int_value的另外一个名字
    int& refValue = int_value;

//错误:引用必须被初始化
int & refValue2;
注意:
引用并不是对象,知识为一个已经存在的对象起了一个别名
引用只能绑定在对象上,不能与字面值或某个表达式的计算结构绑定在一起int &ref_value = 10;//错误
引用必须初始化,所以使用引用之前不需要测试其有效性,因此使用引用可能会比使用指针效率高。(int* num = &abc;推荐使用引用,减少使用指针)
指向常量的引用是非法的
但是const double &ref = 100;//表示一个常量的引用

指针和引用两者之间的关系

猜你喜欢

转载自blog.csdn.net/anyifan369/article/details/90675863
今日推荐