我是靠谱客的博主 寂寞红酒,最近开发中收集的这篇文章主要介绍指针的概念,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

开发工具与关键技术:C++
作者:陆滕

1:指针:把地址存放在一个变量中,然后通过先找出地址变量中的值,再由此地址找到要访问的变量的方法,称为“间接访问”。(地址变量,其实就是指针)
(就像你在网上买的东西然后会留下地址,会方便快递人员,把你在网上买的东西,送到你手里)

2:在程序中参加数据处理的量,不是指针本身的量,因为指针本身是个地址量。而指针所指向的变量,是指针所指向的内存区域中的数据(简单来说就是:指针的指向的目标)才是需要处理的数据。
3:指针的定义指出了指针的存储类型和数据类型。

数据类型指针变量名
列如:
Int
p; 名字为p指向int类型的指针
Static int* p1; (static:静态),【在一开始代码还没运行就安排好了内存;】
Char* p2; 名字为p2指向char类型的指针

4:通常把指针指向的变量的数据类型称为指针的数据类型(注意:指针的数据类型和指针变量的数据类型是两回事)。
5:在指针变量名前的符号“*”表示指向运算。指针变量的类型确定后只能指向这种的数据类型(当然你可以强制类型转换)
(简单的说就是:就比方说你的通讯地址(电话号码)和你的家庭住址 ,家庭地址不能写在通讯地址里面,要不然就乱套了(可以这样做,只不过会给自己带来麻烦而已))
6:具有相同存储类型和数据类型的指针可以在一行中说明,他们也可以和同类型的普通变量在一起说明:
列如:
Int *p1,p2,p3;
Char m,da;
注意:当在一行中定义多个同一类型的指针时,用逗号表达式隔开各指针变量标识符,并且每个变量前都要加上“
”。
7:(没有初始化的值的指针严禁使用)定义了一个指针后,在使用此指针前,必须首先给他赋一个合法的值。否则,程序中对指针的使用就有可能导致系统崩溃。可以在定义指针的同时,通过初始化来给指针赋值,也可以在使用之前给指针赋值(当然C++里面赋不赋初始值都没什么关系)((是不过这是个代码习惯,就像饭前洗手,不洗手也可以吃饭,但是为了健康要洗手),为了程序更好的运行,所以定义指针一定要设初始值)
存储类型数据类型
指针名 = 初始地址值;
例如:
Int a;
int
p1 = &a;
将变量a的内存地址作为初始值赋予int型指针p1。

当把一个变量的内存地址作为初始值赋给指针时,该变量必须在指针初始化之前已经说明过。
(简单来说:变量只有在说明之后才被分配一定的内存地址)。
(注意:该变量的数据类型必须与指针的数据类型一致)。
8:利用指针来访问变量值需要使用间接访问运算符“*”.
列如:
Int p =1, *p1 =&p;
Cout<<*p1;

9:二级指针:存储类型 数据类型** 指针变量
其中的两个“**”表示二级指针;数据类型是指通过两次间接寻址后所访问的变量的类型。
例如:
Int I;
Int *p =&I;
Int **pp = &p;
在这里插入图片描述

10:指针运算:指针运算的实质是地址的计算;
指针运算的种类是有限的,他只能进行算术运算关系运算和赋值运算。

11:void指针和const 指针

Void 指针:他可以指向任何类型的C++数据。也就是说,可以用任何类型的指针直接给void指针赋值。不过,如果需要将void指针的值赋值给其他指针,则要进行强制类型转换
例如:
Int a;
Int* p1=&a;
Void* p2 = p1;
Int* p3=(int*)p2;

Const:关键字const放在不同的位置表示的意义也不相同/
1;关键字const放在指针类型前,就是声明一个指向常量的指针。可以改变指针本身的值,但是不能改变通过指针来改变他所指向的值
2:const 放在“”号和指针名之间,就是声明一个指针常量(简称“常指针”)。因此指针本身的值不可以改变,也就是说这个指针只能指向初始化的那个变量地址。
3:const int
const p
则声明一个指向常量的指针常量,指针本身和指向的数据的值都不可改变

12:动态内存分配:
1:所为动态内存分配时指在程序运行期间根据实际需要随时申请内存,并在不需要时释放。

2:数据所占得内存可以分为3类:静态存储区,栈,堆。在程序运行开始前就分配的存储空间都在静态存储区中:局部变量分配在“栈”中:动态内存分配在“堆”中,“堆”也称为自由存储单元。NEW运算符与delete运算符一起使用,就可以直接进行动态内存的申请和释放(简称为“创建和删除“)。

13:new运算符用于申请所需的内存单元,返回指定类型的一个指针。
指针 = new 数据类型 ;
Int p;
P = new int;
系统自动根据int类型的空间大小开辟一个内存单元,用来保存int型数据,并将地址保存在指针p当中。
14:delete运算符时释放new申请到的内存。当程序不在需要使用new运算符创建的某个内存单元,就必须用运算符delete来删除他。
语法格式:
Delete 指针://释放非数组内存单元
列如:
Int
p;
p =new int;//申请内存单元
*p = 1;
delete p; //释放内存单元

Delete[常量]指针; //释放数组内存单元
列如:
Int *p;
p = new int[5];
delete[5]p;

  15: 指针型函数:当一个函数 的返回值是指针类型时,这个函数就是指针型函数。

    1: 定义指针型函数的语法格式:
          数据类型*函数名(参数表)
    列如:
        Int *demo(a,b)
     他表示函数demo 返回一个指针值,这个指针指向一个整形数据,a、b是形参

   16:函数指针就是指向函数的指针。定义函数指针的语法格式:
         数据类型(*函数指针名)(参数表);
                   
         列如:
     Int(*p)(int,int);       
     就定义了一个函数指针p,他指向一个返回整形值,有两个整形参数的函数。

    在使用函数指针之前,必须赋值,使他指向一个函数的入口地址。
    赋值的一般语法格式:
    函数指针名=函数名;

最后

以上就是寂寞红酒为你收集整理的指针的概念的全部内容,希望文章能够帮你解决指针的概念所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部