C++ 指针的定义和运算(第六章)

目录

指针的概念、定义和指针运算

内存空间的访问方式

指针的概念

指针变量的定义

与地址相关的运算——“*”和“&”

指针变量的初始化

指针变量的赋值运算

指针空值nullptr

例6-5 指针的定义、赋值与使用

运行结果:

例6 - 6 void类型指针的使用

指向常量的指针

指针类型的常量

指针的算术运算、关系运算

指针类型的算术运算

指针类型的算术运算

指针与整数相加的意义

指针类型的关系运算

如果两个指针指向同一个数组,它们就可以相减,其结果为两个指针之间的元素数目。 


指针的概念、定义和指针运算

内存空间的访问方式

  • 通过变量名访问

  • 通过地址访问

指针的概念

  • 指针:内存地址,用于间接访问内存单元

  • 指针变量:用于存放地址的变量

指针变量的定义

  • 例:

static int i;

static int* ptr = &i;

  • 例:

*ptr = 3;

与地址相关的运算——“*”和“&”

  • 指针运算符

  • 地址运算符:&

指针的初始化和赋值

指针变量的初始化

  • 语法形式

存储类型 数据类型 *指针名=初始地址;

  • 例:

int *pa = &a;
  • 注意事项

    • 用变量地址作为初值时,该变量必须在指针初始化之前已声明过,且变量类型应与指针类型一致。

    • 可以用一个已有合法值的指针去初始化另一个指针变量。

    • 不要用一个内部非静态变量去初始化 static 指针。

指针变量的赋值运算

  • 语法形式

指针名=地址

注意:“地址”中存放的数据类型与指针类型必须相符

  • 向指针变量赋的值必须是地址常量或变量,不能是普通整数,例如:

    • 通过地址运算“&”求得已定义的变量和对象的起始地址

    • 动态内存分配成功时返回的地址

  • 例外:整数0可以赋给指针,表示空指针。

  • 允许定义或声明指向 void 类型的指针。该指针可以被赋予任何类型对象的地址。

例: 

void *general;

指针空值nullptr

  • 以往用0或者NULL去表达空指针的问题:

    • C/C++的NULL宏是个被有很多潜在BUG的宏。因为有的库把其定义成整数0,有的定义成 (void*)0。在C的时代还好。但是在C++的时代,这就会引发很多问题。

  • C++11使用nullptr关键字,是表达更准确,类型安全的空指针

例6-5 指针的定义、赋值与使用

//6_5.cpp

#include <iostream>

using namespace std;

int main() {

	int i; //定义int型数i

	int* ptr = &i; //取i的地址赋给ptr

	i = 10; //int型数赋初值

	cout << "i = " << i << endl; //输出int型数的值

	cout << "*ptr = " << *ptr << endl; //输出int型指针所指地址的内容

	return 0;

}

运行结果:

i = 10

* ptr = 10

例6 - 6 void类型指针的使用

#include <iostream>

using namespace std;

int main() {

    //!void voidObject; 错,不能声明void类型的变量

    void* pv; //对,可以声明void类型的指针

    int i = 5;

    pv = &i; //void类型指针指向整型变量

    int* pint = static_cast<int*>(pv); //void指针转换为int指针

    cout << "*pint = " << *pint << endl;

    return 0;

}

指向常量的指针

  • 不能通过指向常量的指针改变所指对象的值,但指针本身可以改变,可以指向另外的对象。

 int a;

const int *p1 = &a; //p1是指向常量的指针

int b;

p1 = &b; //正确,p1本身的值可以改变

 *p1 = 1; //编译时出错,不能通过p1改变所指的对象

指针类型的常量

  • 若声明指针常量,则指针本身的值不能被改变。

int a;

int * const p2 = &a;


p2 = &b; //错误,p2是指针常量,值不能改变

指针的算术运算、关系运算

指针类型的算术运算

  • 指针与整数的加减运算

  • 指针++,--运算

指针类型的算术运算

  • 指针p加上或减去n

    • 其意义是指针当前指向位置的前方或后方第n个数据的起始位置。

  • 指针的++、--运算

    • 意义是指向下一个或前一个完整数据的起始。

  • 运算的结果值取决于指针指向的数据类型,总是指向一个完整数据的起始位置。

  • 当指针指向连续存储的同类型数据时,指针与整数的加减运和自增自减算才有意义。

指针与整数相加的意义

指针类型的关系运算

  • 指向相同类型数据的指针之间可以进行各种关系运算。

  • 指向不同数据类型的指针,以及指针与一般整数变量之间的关系运算是无意义的。

  • 指针可以和零之间进行等于或不等于的关系运算。

例如:

p==0或p!=0 

如果两个指针指向同一个数组,它们就可以相减,其结果为两个指针之间的元素数目。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值