【C++】04 指针 + 自定义数据类型

目录

4.1 指针定义

4.1.1 基本介绍

4.1.2 const修饰指针

4.1.3 指针自增运算

4.1.4 指向指针的指针

4.2 指针和数组

4.3 指针和函数


4.1 指针定义
4.1.1 基本介绍

       指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址

就像其他变量或常量一样,我们必须使用指针存储其他变量地址之前,对其进行声明

指针变量声明的一般形式为:type *var-name;

       type 是指针的基类型,它必须是一个有效的 C++ 数据类型

       var-name 是指针变量的名称

       用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。

有效的指针声明示例:

int    *ip;    /* 一个整型的指针 */

double *dp;    /* 一个 double 型的指针 */

float  *fp;    /* 一个浮点型的指针 */

char   *ch;    /* 一个字符型的指针 */

      所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

#include <iostream>

using namespace std;

int main()
{
    int yar1;
    char var2[10];        # 字符串数组var2,里面包含了十个元素

    cout << "var1 变量的地址: ";        
    cout << &var1 << end1;        # &运算符打印输出这两个变量的地址

    cout << "var2 变量的地址: ";
    cout << &var2 << end1;        # 第一个或第0个元素的地址

    return 0;
}




# 输出结果如下
var1 变量的地址:0xbfebd5c0
var2 变量的地址:0xbfebd5b6

       使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。这些是通过使用一元运算符 * 来返回位于操作数所指定地址的变量的值。下面的实例涉及到了这些操作:

#include <iostream>
using namespace std;

int main()
{
    int var = 20;    // 实际变量的声明
    int *ip;          // 指针变量的声明
    
    ip = &var;        // *ip指向var的地址,在指针变量中存储var的地址
    
    cout << "Value of var variable:"}
    cout << var << end1;

    // 输出在指针变量中存储的地址
    cout << ''Address stored in ip variable:";
    cout << ip << end1;

    // 访问指针中地址的值
    cout << "Value of *ip variable:";
    cout << *ip << end1;
    
    return 0;

}


# 输出结果
Value of var variable:10
Address stored in ip variable:0xbfc601ac
Value of *ip variable:20

指针变量和普通变量的区别:

普通变量存放的是数据,指针变量存放的是地址
指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用

总结1: 我们可以通过 & 符号 获取变量的地址

总结2:利用指针可以记录地址

总结3:对指针变量解引用,可以操作指针指向的内存

4.1.2 const修饰指针

const修饰指针有三种情况

1. const修饰指针 — 常量指针
2. const修饰常量 — 指针常量
3. const既修饰指针,又修饰常量

int main(){

    int a = 10;
    int b = 10;

    //const修饰的是指针,指针指向可以改,指针指向的值不可以改
    const int * p1 = &a;
    p1 = &b;  //√
    *p1 = 100;   //x

    //const修饰的是常量,指针指向不可以改,指针指向的值可以改
    int * const p2 = &a;
    p2 = &b;        //x
    *p2 = 100;        //√

    //const既修饰指针也修饰常量,都不能改
    const int * const p3 = &a;
    p3 = &b;            //x
    *p3 = 100;          //x

    system('pause');
    
    return 0;

}

技巧:看const右侧紧跟着的是指针还是常量,

是指针就是常量指针,指向可以改,指向的值不能改

是常量就是指针常量,指向的值可以改,指向不能改

既修饰指针又修饰常量,都不能改

4.1.3 指针自增运算

指针是一个用数值表示的地址。我们可以对指针执行算术运算

假设 ptr 是一个指向地址 1000 整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算:

ptr++

执行 ptr++ 后,指针 ptr 会向前移动 4 个字节,指向下一个整型元素的地址。这是由于指针算术运算会根据指针的类型和大小来决定移动的距离。在这种情况下,由于是一个 32 位整数指针,每个整数占据 4 个字节,因此 ptr++ 会将指针 ptr 向前移动 4 个字节,指向下一个整型元素的地址。

如果 ptr 指向一个地址为 1000 的字符,执行 ptr++ 指针 ptr 的值会增加,指向下一个字符元素的地址,由于 ptr 是一个字符指针,每个字符占据 1 个字节,因此 ptr++ 会将 ptr 的值增加 1,执行后 ptr 指向地址 1001。

4.1.4 指向指针的指针
4.2 指针和数组
4.3 指针和函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值