C语言入门学习笔记十二——指针及其相关知识(一)

这篇博客介绍了C语言中的指针基础知识,包括指针的定义、运算以及野指针和空指针的区别。指针作为内存地址,允许对数据的地址进行操作。文章强调了指针变量的重要性,如变量的地址和内容访问,并讨论了指针运算符如`&`和`*`的用法。此外,还探讨了野指针和空指针的概念,指出未初始化的指针和已释放内存的指针可能成为野指针,强调了初始化和管理指针的重要性。
摘要由CSDN通过智能技术生成

指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用 4 个字节,char 占用 1 个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编号是唯一的,根据编号可以准确地找到某个字节。

 

在计算机中, 所有的数据都是存放在存储器中的, 不同的数据类型占有的内存空间的大小各不相同。内存是以字节为单位的连续编址空间, 每一个字节单元对应着一个唯一的编号, 这个编号被称为内存单元的地址。比如: int类型占两个字节, char类型占1个字节等。内存为变量分配存储空间的首个字节单元的地址, 称之为该变量的地址。地址用来标识每一个存储单元, 方便用户对存储单元中的数据进行正确的访问。在高级语言中地址形象地称为指针,  CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。

需要注意的是 变量名和函数名为我们提供了方便,让我们在编写代码的过程中可以使用易于阅读和理解的英文字符串,不用直接面对二进制地址,那场景简直让人崩溃。虽然变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符,但在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。

指针相对于一个内存单元来说,指的是单元的地址,该单元的内容里面存放的是数据。在C语言中,允许用指针变量来存放指针,因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。

 指针的定义与使用

变量的指针与指针变量:

在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量

变量的指针就是变量的存储地址,指针变量就是存储指针的变量。指针变量是存放一个变量地址的变量,不同于其他类型变量,它是专门用来存放内存地址的,也称为地址变量。定义指针变量的一般形式为:类型说明符 * 变量名 *

类型说明符表示指针变量所指向变量的数据类型;* 表示这是一个指针变量;变量名表示定义的指针变量名,其值是一个地址,例如:char * p1;表示p1是一个指针变量,它的值是某个字符变量的地址

//定义指针变量与定义普通变量非常类似,不过要在变量名前面加星号*,格式为:int *fp;//*表示这是一个指针变量,fp是一个指向int数据类型的指针float *a,*b; //表示a和b都是指针变量,都指向一个为float数据类型的指针

  指针变量的使用:

      取地址运算符&:单目运算符&是用来取操作对象的地址。

例:&i 为取变量 i 的地址。对于常量表达式、寄存器变量不能取地址(因为它们存储在存储器中,没有地址)。

指针运算符 * (间接寻址符):与&为逆运算,作用是通过操作对象的地址,获取存储的内容。   

例:x = &i      x 为 i 的地址,*x 则为通过 i 的地址,获取 i 的内容。​​​​​​​

//赋值int a = 100;//定义了一个a的整形变量int *p_a = &a;//将一个int类型的指针p_a,p_a指向了a(也叫p_a指向了a的地址)在定义指针变量 p_a 的同时对它进行初始化,并将变量 a 的地址赋予它,此时 p_a 就指向了 a。值得注意的是,p_a 需要的一个地址&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜子牙大侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值