五 指针(自己的理解,可能会有误,麻烦指出,谢谢)

本文深入解析C++指针的基本概念,包括指针变量的定义、指针的加减法及特点,如动态数据结构的申请和数组名作为指针使用的方法。通过实例演示了指针操作符的应用,帮助读者理解指针在C++编程中的作用。

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

1.指针简要介绍

(1)对于指针的理解:指针相当于一个指示器,指向一个地址,告诉程序在内存的哪个地方可以找到数据。
(2)指针变量的定义

int *p=NULL;  //定义了一个指针变量p,p指向一个内存空间,也就是特殊空地址NULL(其实就是0)

(3)给指针变量赋值

int a=3;   
int *p=&3; 
//&是取地址符,即把变量a的内存空间地址给了p,也就是将p指针指向a的地址,所以p是a的地址&a,而*p才是a的值3(*是指针操作符)
//可能有点绕,不过我会尽量解释清楚

2.指针的加减法

一般地,若p是指针,k是正整数,则p+k为指针p后第k个元素,也就是从p开始,跳过k个整数的空间,到达第p+k个整数的地址。
举个不太好吃的栗子:

//省略头文件等
int a[]={10,11,12,13,14,15};
int *p=&a[0];
cout<<*(p+3);

这里将会输出一个整数 13,*(p+3)相当于从a[0]开始往后数三个数,到达a[3]

注意:* p+3和 *(p+3)有区别, * p+3是a[0]+3,而 *(p+3)才是a[3]

3.指针的特点

(1)指针是动态数据结构,它可以动态地申请空间

int *p=NULL;    //这里在定义的时候,p并没有空间,要通过下一行的语句申请空间
p=new(int);     //为p指针申请一个int类型的空间

这样做的优势在于,可以根据需要申请相应大小的空间,在一定程度上优化空间
(2)C++中,数组名可以作为指针使用
我们还是来吃栗子(这个栗子和上面的差不多)

#include<iostream>
using namespace std;
int main(){
	int a[]={10,11,12,13,14,15};  //这里要注意,因为a数组已经赋值为了常量,所以计算机自己会算好大小,不需要写
	int *p=a+4;
	cout<<*a<<endl;
	cout<<*(a+3)<<endl;
	cout<<*(++p)<<endl;
	return 0;
}

输出结果

10
13
15

我们来分析一下代码

int *p=a+4;         //这里直接将a作为指针,a指向数组开始的元素10,a+4就是a[4]
cout<<*a<<endl;     //输出a[0]
cout<<*(a+3)<<endl; //指针的加法,之前已经说过了
cout<<*(++p)<<endl; //同上

这里还要注意的是,a数组作为静态数据结构是固定不变的,而指针p是动态数据结构,可以变。比如说,a=a+2是不允许的,而p=p+2合法

(关于指针的第三个特点,下午更新)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值