C++指针(一)

本文详细讲解了内存空间的访问方式,包括通过变量名和地址,以及指针的定义、运算和初始化。介绍了指针作为内存地址的工具,如何通过指针操作数据,以及常量指针、void指针和不同类型指针的运用。还涵盖了指针算术运算和关系运算的重要知识点。
摘要由CSDN通过智能技术生成

内存空间的访问方式

1.通过变量名访问.            2.通过地址访问.

指针的概念

指针:内存地址,用于间接访问内存单元            指针变量:用于存放地址的变量

static int i;

static int* ptr = &i;(ptr---指向int变量的指针)

与地址相关的运算*和&

指针运算符:*                地址运算符:&

指针的初始化和赋值

语法形式

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

int *pa = &a;

PS:用变量地址作为初值时,该变量必须在指针初始化之前已经声明过,且变量类型应与指针类型一致。可以用一个已有合法值的指针去初始化另一个指针变量。不要用一个内部非静态变量去初始化static指针。

指针变量的赋值运算

语法形式 指针名=地址

PS:"地址"中存放的数据类型与指针类型必须相符,向指针变量赋的值必须是地址常量或变量,不能是普通整数。

例如:通过地址运算”&“求得已定义的变量和对象的起始地址,动态内存分配成功时返回的地址

例外:整数0可以赋给指针,表示空指针。c++11标准中使用nullptr关键字,是表达更准确,类型更安全的空指针

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

例如:void *general 

#include<iostream>
using namespace std;
int main() {
 int i; //定义int整数i
 int* ptr = &i; //取i的地址赋给ptr;
 i = 10; //给int类型整数 赋值
 cout << "i=" << i << endl; //输出i的值
 cout << "*ptr=" << *ptr << endl;//输出指针中地址的值
 cout << "ptr=" << ptr << endl;//输入指针中存储的地址
 return 0;

}

void类型指针的使用

#include<iostream>
using namespace std;
int main() {
 //!void voidObject; 错,不能声明void类型的变量
 void* pv; //对,可以声明void类型的指针
 int i = 5;
 pv = &i;
 int* pint = static_cast<int*>(pv);//void指针转换为int指针
 cout << "*pint=" << *pint << endl;
 return 0;
}

指向常量的指针(相当于只读的指针)

const指针

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

例:

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个数据的起始位置。

指针的++,--运算

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

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

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

指针类型的关系运算

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

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

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

例:p==0或p!=0(可以用来判断一个指针是否为空指针)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值