《C和指针》(6)指针

1、内存和地址

  • 计算机的内存是由数以亿万计的位(bit)组成,每一个位可以容纳值01值。由于一个位所能表示的值的范围太有限,所以单独的位用处不大。通常许多为合成一组作为一个单位,这样就可以存储范围较大的值。
  • 下图展示了现实机器中的一些内存位置,这些位置的每一个都被称为 字节(byte ,每个字节都包含了存储一个字符所需要的位数。在现在的许多机器上 每一个字节包含8个位 ,可以存储无符号值0-255,或者有符号值-128--127
    在这里插入图片描述
  • 之后为了存储更大的值,我们把两个或更多的字节合在一起作为一个更大的内存单位。例如,机器以字为单位存储整数,每一个字一般有24个字节组成。下面这个图所表示的内存位置以4个字节来表示。
    在这里插入图片描述
  • 由于它们包含了更多的位,每一个字可以容纳无符号整数的范围是从0-4294967295(或者是 2 32 − 1 2^{32}-1 2321),或者是有符号的范围(-21474836482147483647(或者说是 − 2 31 -2^{31} 231 2 31 − 1 2^{31}-1 2311))。
  • 注意:地址是最左边那个字节的位置还是最右边那个字节的位置,与计算机体系结构有关。还需要注意的硬件事项是边界对齐,在要求边界对齐的机器上,整型值存储的起始位置只能是某些特定的字节,通常是24的倍数。
  • 地址与内容
    • 这里有一个例子,上边的数字是内存地址,下边的是对应的内容。
      在这里插入图片描述

    • 如果你记得这几个数的地址你就可以根据地址来用这些值,但是要记住地址太难了,地址有很多,很复杂,所以不切实际。所以可以通过名字而不是地址来访问内存的位置。如下图所示:

      在这里插入图片描述

    • 有一点很重要,名字与内存位置之间的关联并不是硬件提供的,它是由编译器实现的。所以这些变量给了我们一种更方便的方法记住地址————硬件仍然通过地址访问内存位置

2、值和类型

在这里插入图片描述

  • 现在让我们来看一下存储于这些位置的值。
    int a = 112,b = -1;
    float c = 3.14; //1078523331解释成浮点数为3.14
    int *d = &a; //变量a的地址是100,所以d为100
    float *e = &c; //变量c的地址是108,所以e为108
    
    • c声明的浮点型变量,但是在图中却是一个整数,为什么?
      原因:该变量包含了一系列内容为01的位,他们可以解释为整数,也可以被解释为浮点数,这取决于他们被使用的方式,如果使用的是整型算术指令,这个值就解释为整数,如果使用的浮点数类型的指令,就解释为浮点数。
    • 这个事实引出了一个重要的结论:不能简单的通过检查一个值的位来判断他的类型

3、指针变量的内容

在这里插入图片描述

  • 需要清楚以下变量对应的值

    int *d = &a; 
    float *e = &c; /*通过上面的定义得到以下值*/
    &d = 112 // 变量d的地址d = 100 // 变量d的值、变量a的地址
    *d = 112 // 地址d中的内容、变量a的值&e = 116// 变量e的地址e = 108// 变量e的值、变量c的地址
    *e = 3.14// 地址e中的内容、变量e的值
    

4、间接访问操作符

  • 通过一个指针访问它所指向的地址的过程成为间接访问或解引用指针。这个用于执行间接访问的操作符是单目操作符*。下面是间接访问操作符的一些示例。
    在这里插入图片描述

  • 可通过以下的箭头记法进行描述

    在这里插入图片描述

5、未初始化和非法的指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/52381.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware vSphere整体解决方案及实验拓扑

VMware vSphere整体解决方案及实验拓扑 VMware vSphere完整的解决方案 VMware vSphere有两个核心组件:ESXI,vCenter。ESXI实现的是单机虚拟化,而vCenter实现集群虚拟化,把所有的ESXI统一进行管理。当然了,要想是实现…

【福建事业单位-推理判断】03类别推理

【福建事业单位-推理判断】03类别推理 一、类别推理1.1语义关系考点一、近义反义关系(不需要严格的,意思相近即可)近义反义的二级辨析(感情色彩)考点二:比喻义、象征义 1.2 逻辑关系1.2.1全同关系&#xff…

提交App Store应用图标不能包含alpha通道

近日提交APP至App Store时遇到一个问题,在交付ipa时出现一个图标不符合规定的提示 翻译过来就是 资产验证失败(90717)应用商店图标无效。“HBuilder.App”中资产目录中的应用商店图标不能是透明的,也不能包含alpha通道。 因为我…

PHP8的数据类型转换-PHP8知识详解

什么是数据类型转换? 答:数据从一个类型转换成另外一个类型,就是数据类型转换。 在PHP8中,变量的类型就是由赋值决定的,也就是说,如果 string 赋值给 $var,然后 $var 的类型就是 string。之后…

flex 弹性布局

Flex 布局的使用 任何一个容器都可以指定为 Flex 布局。 .box{ display: flex; //flex作为display的一个属性使用 } 行内元素也可以使用 Flex 布局。 .box{ display: inline-flex; } 注意:设为 Flex 布局以后,子元素的float、clear和vertical-align…

c高级:day3

作业: 1. 整理思维导图 2.判断家目录下,普通文件的个数和目录文件的个数 #!/bin/bash ######################################################################## # File Name: zy1.sh # Created Time: 2023年08月04日 星期五 19时13分08秒 ##############################…

C++ __builtin_popcount函数作用

__builtin_popcount函数是系统自带的一个返回值是int/long/long long二进制1的个数的函数。 对于int,long, long long分别用一下三种函数: __builtin_popcount(unsigned int n)//返回值为int __builtin_popcountl(unsigned int n)//返回值为…

深入理解MVVM架构模式

MVVM原理 MVVM是一种用于构建用户界面的软件架构模式,它的名称代表着三个组成部分:Model(模型)、View(视图)和ViewModel(视图模型)。MVVM的主要目标是将应用程序的UI与其底层数据模…

Django调研

1. Django 简介 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本…

【uniapp】样式合集

1、修改uni-data-checkbox多选框的样式为单选框的样式 我原先是用的单选&#xff0c;但是单选并不支持选中后&#xff0c;再次点击取消选中&#xff1b;所以我改成了多选&#xff0c;然后改变多选样式&#xff0c;让他看起来像单选 在所在使用的页面上修改样式即可 <uni-d…

IntelliJ IDEA 2023.2社区版插件汇总

参考插件帝&#xff1a;https://gitee.com/zhengqingya/java-developer-document 突发小技巧&#xff1a;使用插件时要注意插件的版本兼容性&#xff0c;并根据自己的实际需求选择合适的插件。同时&#xff0c;不要过度依赖插件&#xff0c;保持简洁和高效的开发环境才是最重要…

数据库索引失效的情况

1.对添加了索引的字段进行函数运算 2.如果是字符串类型的字段&#xff0c;如果不加单引号也会导致索引失效 3.如果最索引字段使用模糊查询&#xff0c;如果是头部模糊索引将失效&#xff0c;如果是尾部模糊索引则正常 4.如果使用or分割符&#xff0c;如果or前面的条件中的列有…