C++(5)指针

本文详细介绍了C++中的指针概念,包括地址与指针、指针变量的初始化和赋值、指针类型算术运算、指针与数组的关系、指针与字符串的交互以及指针在函数中的应用。强调了指针的运算规则、指针数组与二维数组的区别,以及通过指针实现数据的双向传递和函数回调的灵活性。
摘要由CSDN通过智能技术生成

 

 

一、地址和指针

1.内存

内存由一系列连续的存储单元组成,每个存储单元都有计算机分配的 "编号" ——地址

定义一个变量,即是给变量分配从某一地址开始的若干存储单元,且通常以起始地址作为该变量的地址

注:内存空间的访问方式:通过变量名访问,通过地址访问

2.指针和指针变量

指针:一个变量的地址称为该变量的指针

指针变量:专门存放变量地址的变量(即指针)称为指针变量

 

二、指针变量

1)初始化    存储类型  数据类型  *指针名 = 初始地址    如:int* a_ptr = &a ;

注:

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

2)赋值

1.语法形式    指针名 = 地址    注:"地址"中存放的数据类型与指针类型必须相等

2.赋值为地址常量或变量,不能是普通整数

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

3.指针空值nullptr

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

4.允许定义或声明指向 void 类型的指针

该指针可以被赋予任何类型对象的地址,如:void* general ;

#include <iostream>
using namespace std;

int main() {
//	void voidObject; 错,不能声明void类型的变量
	void *pv; //对,可以声明void类型的指针
	int i = 5;
	pv = &i; //void类型指针指向整型变量
	int *pint = (int*)(pv); //void指针转换为int指针
	cout << "*pint = " << *pint << endl;
	return 0;
}

结果:
*pint = 5

3)指针类型算术运算

1.指针 p 加上或减去 n

指针当前指向位置的前方或后方第 n 个数据的起始位置

2.指针的 ++、-- 运算

指向前一个或后一个完整数据的起始位置

注:

  • 运算的结果值取决于指针指向的数据类型,总是指向一个完整数据的起始位置
  • 当指针指向连续存储的同类型数据时,指针与整数的加减运算和自增自减算才有意义

4)指针类型关系运算

  • 指向相同类型数据的指针之间可以进行各种关系运算
  • 指向不同数据类型的指针,以及指针与一般整数变量之间的关系运算是无意义的
  • 指针可以和 0 之间进行等于或不等于的关系运算,即 p == 0p != 0

5)指向指针的指针

语法形式    数据类型  **变量名

如:char  **p ;

*p 是指针变量的定义形式

*p 前面的 *,表示指针变量 p 是指向一个字符指针 变量  (即指向字符型数据的指针变量࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值