C语言-指针(一)

目录

前言

 初阶指针讲解逻辑

 了解什么是指针

 指针总结:

指针和指针类型

 野指针

发生野指针的三种情况:

规避野指针


前言

hello各位小伙伴,我是你们的博友ljp-nan,今天学习了指针初阶的一部分内容。我来总结一下今天的所学内容,目的是巩固今天所学知识。让我们开始今天的学习。

指针在初识C语言那篇文章已经简单的介绍过了,现在我们详细的介绍C语言中的指针。希望博友们可以在这篇文章中增长知识。话不多说,我们进入正题。 

 初阶指针讲解逻辑

 在这篇文章我们只会讲解前三个表格的内容。

 了解什么是指针

指针就是地址,地址就是指针。在计算机内存中会有许多大小为1个字节的内存块,每个内存块都有自己独立的地址,通过它们的地址就可以访问到每一个字节的内存。这里可以对比酒店房间的门牌号,如果要找到你的朋友在这个酒店的哪个房间,怎么找到这个房间,只需要告诉你门牌好就可以了。这样做,会使内存的使用和管理更加方便。如图所示,描述了内存块和地址之间的关系。

 那么指针就是存放内存地址的变量,称为指针变量。也就是我们所说的指针。

我们可以通过&(取地址操作符)取出变量的内存地址,把地址存入一个变量中,这个变量就是指针变量。

如以下代码:

#include <stdio.h>
int main()
{
	int a = 0;
	//取出变量a的地址,放入整型指针变量中
	int* p = &a;  
	return 0;
}

我们可以通过调试来观察变量p

 指针总结:

  1. 指针变量,用来存放地址的变量。
  2. 一个小的内存单元里有一个字节
  3. 内存的编制

        对于32位的机器,假设有32根地址总线,那么假设每根地址线在寻址的时候产生高电平和低电平就是1和0。

        那么32根地址线产生的地址就会是:

                00000000 00000000 00000000 00000001

                00000000 00000000 00000000 00000002

                ……

                11111111 11111111 11111111 11111111

        总共有2的32次方种变化,每种变化对应一个地址,那么这里就有2^32次方个地址,所能表示的内存大小为:

                2^32/1024 = 2^22 kb

                2^22kb/1024 = 2^12mb

                2^12mb/1024 = 2^2gb = 4gb

        所以32根地址总线可以给4GB的内存空间寻址。同理,64位的机器可以为2^34GB的内存空间寻址。

       4.这里我们就可以明白,32位机器上,地址是32个0或者32个1组成二进制序列,那地址就得用4个字节的空间来存储,所以一个指针变量的大小就应该是4个字节。那如果是64位的机器上,如果有64根地址线,就有64个0或者64个1组成二进制序列,每八位为一个字节,这里就占用了八个字节的存储空间,所以,64位机器上的指针变量的大小为8个字节。

  • 指针变量是用来存放地址的,地址是唯一标示一个内存单元的。
  • 指针的大小在32位平台是4个字节,在64位平台是8个字节。

指针和指针类型

指针的类型可以是整型,短整型,长整型,单精度浮点型,双精度浮点型,结构体类型等等。

不同类型的指针存放对应类型数据的地址。

这里我们需要研究指针类型的意义是什么?

指针的类型决定了指针向前或向后跳过多少个字节。也就是一次可以跳过多少个字节,比如,整型指针每次跳过四个字节,字符型指针每次跳过一个字节。我们来验证这个说法:

指针的类型决定了,解引用时可以访问到多少字节,比如,整型指针一次解引用可以访问到4个字节,字符型指针一次可以访问一个字节。我们来验证这个说法:

int* 指针

 char* 指针

 这里要充分注意到,可以根据实际情况来选择什么类型的指针。

 野指针

野指针是指针指向的位置是不可知的,不正确的,没有明确限制的,野指针就像是一只野狼,它毫无目的性的走过来走过去,不知道要走去哪,没有一个明确的去处,那就是在森林里游荡。野指针就是这个道理。

发生野指针的三种情况:

  1. 指针未初始化
  2. 指针越界访问
  3. 指针指向的空间释放

第一种情况,指针未初始化。

 第二种情况指针越界访问

情况三,在后面的内存管理章节中详细介绍

规避野指针

  1. 在定义指针变量时,要进行初始化。
  2. 小心指针的越界访问。
  3. 指针指向的空间被释放,要及时把指针变量置为NULL。
  4. 避免返回局部变量的地址,因为在函数调用时,函数内的局部变量会在函数调用结束后销毁,那么这个变量的地址就不存在了。
  5. 在使用指针之前要检查指针的有效性。 

谢谢大佬们的观看,指针的上部分内容就讲完了,让我们期待下部分内容。  

请大佬们点点关注和赞。谢谢大佬们! 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值