栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C记录——指针的基础

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C记录——指针的基础

一个总结——7.20

目录

前言

一、指针的定义?

二、具体内容

1.定义中的要点

2.解引用

3.形参的改变

4.指针+整形

5.指针的强转

总结


前言

本文是对我学习过程中的一个小记录

这次是指针的基础知识,如有错误和遗漏敬请指出。


一、指针的定义?

指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

二、具体内容

1.定义中的要点

1)首先是“地址”

指针本质上是一个地址,它不像之前C里学的"a,b,c"等变量一样是一个值,它的“框”里存的是另一个“框”里的内容的地址。因为计算机找到一个值首先需要能够找到它,这就需要地址,而指针就是这个地址。

2)其次是“大小”

刚才的定义里也说了, 在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。

【在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的】:

指针大小与级别(一级、二级指针)无关,也与类型无关。在x86(32bit) 里是4字节,在x64(64bit)里是8字节。

【而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同】:

根据数据类型的不同,指针变量占用的空间大小也不同,具体大小和它指向的地址所对应的数据类型一致。

3)然后是“操作”

通过对指针进行操作,我们可以突破局部变量的局限,达到操作其他变量的目的。本质上是直接通过地址远程操作对应“框”里的数据,从而达到即使函数调用完毕对应的内存被清掉,也能在调用过程中操作数据。

2.解引用

1)解引用的内容

"*"的作用是引用指针指向的变量值,引用其实就是引用该变量的地址,“解”就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为“解引用”。也就是说,解引用是返回内存地址中对应的对象。

2)个人理解

先举个例子

//解引用  
int a = 10;
int* p = &a;
int* *s = &p;

那么解引用操作(就是*p)如下:

 *s = 10;等效于p = 10;解一次引用  

**s = 10;等效于a = 10;解两次引用

个人理解为指针的“s,p,t"啥的是地址,解引用就是读取操作,可以理解为地址对应的值本身。

具体格式(个人理解):int*(或者**等)+空格+变量名+副职符号(即=)+这个指针变量对应的数据的地址

3)*的含义

       1》 指针的定义

类型*  名称  如: int* mingzi

        2》解引用

*变量   如:*mingzi 

        3》乘法

数据 * 数据  如:10 * 10

4.要注意

指针变量的名字是p啥的,不是*p,*p表示的是解引用操作,这是一个操作,一个动作

3.形参的改变

形参的改变,要影响实参的值,必须:1.传指针  2.解引用。这样才能切实的影响到实参。

4.指针+整形

设指针是p,“整型值”是n,那么p+n表示指针p的指向向后移动了n个p所指向的元素所占有的空间值,即指向向后移动了n个元素。

比如:char *p="1234567890";,则p+4指向了5,若'1'的地址是2000,那么p+4就是2004;

若int x[]={1,2,3,4,5,6,7,8,9,0},*p;,则p+4也指向了5,但若1的地址仍是2000,p+4就是2000+4*4=2016了,因为一个int元素要4个字节存放。

5.指针的强转

强转指的是指针类型的强制转换(目前了解到的)

指针占据一个4个字节的地址空间(x86中),他的值是另一个东西的地址,这个东西可以是普通变量,结构体,还可以是个函数等等。由于,指针的大小是4字节,所以,我们可以将指针强制转换成int型或者其他类型。同样,我们也可以将任何一个常数转换成int型再赋值给指针。所有的指针所占的空间大小都是4字节,他们只是声明的类型不同,他们的值都是地址指向某个东西,他们对于机器来说没有本质差别,他们之间可以进行强制类型转换。

指针 to 指针的强制类型转换是指将指针所指的内容的类型由原先的类型转换为后面的类型:即进行变量解释的时候,解释的类型变化。

int a = 1;
int *p = &a;
float *p1 = (float*)p;

则p和p1的值都是&a(a的地址),但是*p是将&a地址中的值按照int型变量进行解释,而*p1则是将&a地址中的值按照float型变量进行解释。

在指针类型强制转换中:

int m;
int *pm = &m;
char *cp = (char *)&m;

pm指向一个整型,cp指向整型数的第一个字节


总结

是自己的理解和总结,应当还有不足。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1021872.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号