C语言学习笔记(6)

1. 指针的来源

在当代,大多数的现代计算机都会把内存分割成字节,每个字节都有着其唯一的地址。可执行程序由代码和数据两部分构成,而程序中的每个变量都占有着一个或多个字节,也就是说,每个变量都有着自己的地址。而这个就是指针的来源。

其实每个地址就是一个数,但是我们却不能用数来表示地址,存储地址,我们需要用指针变量。例如int *p = i,我们就可以说p是指针变量,存储着变量i的地址。

那么我们说int *p中,p就是指向int 类型对象的指针变量。

2. 取址运算符和间接寻址运算符

&,取址运算符,如果x是变量,那么&x就是变量x所在的地址。

*,间接寻址运算符,如果p是指针变量,*p就代表p所指向的变量的值。

当我们在程序中声明int *p时,其实并没有让p指向任何地址,只是一个空指针,我们也称之为悬浮指针,在程序中,我们应该尽量避免这样的状况,应该尽量当声明的同时进行初始化。否则当今后不小心对*p进行赋值时,如果p恰好指向了某一块系统内存地址,就会造成系统的崩溃。

其实我们第一次接触取址运算符,应该是应用于scanf,现在我们来想想scanf(“%d”,&a)的含义,其实就是告诉scanf函数,要把读取的值放到哪个地址的下面。

3. const保护参数

我们之前说过const代表常量,不允许改变,那么我们也可以将const应用于指针参数上。例如:

void Test(const int *p)就代表*p是不可以改变的,意思也就是p所指向的整数不能被改变。

void Test(int * const p)则代表,p是不可以被改变的,也就是说p只能指向这一块地址。

void Test(const int * const p)则代表,p只可以指向这一块地址,并且这一块地址的数据不能被改变。

4.指针作为返回值

这里我只提一点,不要反悔局部变量的指针变量,因为局部变量出了作用域马上被回收,这时,该指针也就指向了一块废弃的地址。

当然,我们可以返回某些参数的地址,外部变量和静态变量的地址。总之,要确保该指针指向的是一块未经回收的地址即可。

 

posted @   飞林沙  阅读(624)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
点击右上角即可分享
微信分享提示