各种类型的指针

本文深入探讨了C++中的指针,包括指针的类型与地址常量赋值、空指针的使用、指针类型与所指数据类型的关系、void指针的灵活性、指向常量的指针以及指针常量的约束。此外,还介绍了指针的算术运算、关系运算在数组操作中的应用,以及如何通过指针处理数组和定义指针数组。示例代码展示了如何使用指针遍历和打印数组,以及如何通过指针数组输出单位矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

规则

  • 地址中存放的数据类型与指针类型相同;
  • 指针变量的赋值必须是地址常量或者变量,不能是整数;
  • 可以使用0作为空指针;
  • 指针类型表示所指向的数据的类型而非其自身类型;
  • void类型的指针,该对象可以被赋予任意类型对象的地址;

指向常量的指针

不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的地址;

int a;
const int *p = &a;
*p = 1;//报错,无法修改所指向变量的值
int b;
p = &b;//正确,可以修改指针变量存储的值

指针类型的常量

声明指针常量,指针的值(所指变量地址)本身不能被改变;

int a;
int * const p = &a;
int b;
p = &b;//报错

算术运算

指针p加上或者减去n,相当于指针p当前指向位置的前n个位置或者后n个位置;
运算结果与指针所指向的数据类型相关;

y = *p++;
y = *(p++);
//指向下一个数据,两者表示意思相同,* 与 ++ 运算优先级相同


在这里插入图片描述
在这里插入图片描述

关系运算

  • 指针关系运算需要在相同类型的条件下进行;
  • 相等意味着两个指针指向相同的地址;
  • 指针变量可以与0比较;
  • 0表示空指针,也就是不指向任何地址的指针;

指针处理数组

int array[5];
/*
初始化一个一维数组
array为数组的首地址
array 与 &array[0]效果相同
*array 就是 array[0]
*/

把数组作为函数的形参,等价于把指向数组元素类型的指针作为形参;

void f(int p[]);
void f(int p[3]);
void f(int *p); 

使用指针打印数组元素;

# include<iostream>
using namespace std;

int main(){
	int a[5] = {1,2,3,4,5};
	for(int *p=a;p<(a+5);p++){
		//使用指针p从数组首地址往后遍历
		cout << *p << " ";
	}
	cout << endl;
	return 0;
}

指针数组

//定义含三个指向int类型的指针
int * p[3];
//利用指针数组输出单位矩阵
# include<iostream>
using namespace std;
int main(){
	int row1[] = {1,0,0};
	int row2[] = {0,1,0};
	int row3[] = {0,0,1};
	//指针数组
	int *prows[3] = {row1,row2,row3};
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			cout << prows[i][j]	<< " "; 
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值