C++数组、指针与字符串(二)

C++数组、指针与字符串(二)

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

内存空间的访问方式:

通过变量名访问

通过地址访问

指针的概念

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

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

例:
static int i;
static int* ptr=&i;
  指向int变量的指针

与指针相关的运算——“*” 和 “&”

指针运算符:*

地址运算符:&

2.指针的初始化与赋值

指针变量的初始化

语法形式:

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

例:
int *pa=&a;

注意事项:

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

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

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

指针变量的赋值运算

语法形式 指针名=地址

注意:

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

例如:

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

注意:整数0可以赋给指针,表示空指针。

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

例:void *general;

ullpur

例:指针变量的定义、赋值与使用
#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
例: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;
}
运行结果:
*pint = 5

指向常量的指针

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是指针常量,值不能改变

3.指针的算数运算、关系运算

指针类型的算数运算

指针与整数的加减运算

指针++,–运算

指针p加上或减去n

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

指针的++、–运算

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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值