面试宝典P71 例题9详解

news/2024/12/5 8:32:48/

            本人在看这章的该习题时,也曾被搞糊涂过,其实刚开始还是不要看它的解释更好,多加一些打印语句,自然就知道各个变量的地址和对应的值了。

            原题如下:

struct S
{
int i;
int* p;
};

        S s;
int* p = &s.i;
p[0] = 4;
p[1] = 3;

      到这一步,我们定义了一个指针,并开辟了空间大小就是sizeof(struct )那么再通过数组下标来给各个内存单元(数组元素)赋值,当然也可以通过指针偏移量来赋值,这些在C语言指针那里讲得很清楚,两种方式不一样而已。

      也就是此时, s.i = 4;     s.p = 3; 注意,因为结构体的第二个成员是整型指针变量,这里我们将结构体里面的指针p的地址设为00000003;注意,不是指针的指向内容!

      s.p = 3(p[1] = 3)  类似于 int* p = (int*)3;  只是我们这里是通过一个指针p来给成员赋值的 由于数组类型 本来就是int 所以不需要强制转换!

     注意区别  char* p = “123”; 

    

    接下来,

    s.p  =   p;

    这里就是说白了,将结构体成员的p的内容(不是指向的内容),它保存的是一个地址,改为p的内容即&s.i. 这里要注意区分 对于一个指针变量  它本身的地址 和 变量的内容(也是一个地址)以及 该指针变量指向的一个变量(所谓的指向的内容)这三者关系。

   指针给指针赋值 ,一般是给他 变量的内容(一个地址) ,不是它本身的地址 也不是 指针变量所指的内容!

       

     也就是说现在 s.p中的内容是 结构体的首地址!


   好了,那后面的

  s.p[1] =  1;    //  联系上下两句  有点类似于, int a [] = {1, 2, 3,4};  int * p = a;   p[1] = 1;  

  也就是使得s.p = 00000001;


之后再去 用数组下标法 s.p[0]  (其实就是00000001地址指向的内容) 该内容不一定能够被访问!也就是s.p[0]的内容

         同样的,之后s.p[1]也是不可以访问的

更何况写 也就是s.p[0] = 2 ; 更是不可能了。


最后,要注意的是  第一句s.p[1] =1 ; 在此之前由于 s.p是有合法(可正常读写)地址的,所以可以读写;

读写一次之后,由于给了它s.p 一个无法读写的地址如00000001, 那么之后的所有数组下标访问 如s.p[0] s.p[1] 都是非法的。





http://www.ppmy.cn/news/639751.html

相关文章

JS笔记_P71数组字面量

P71数组字面量 创建一个数组使用字面量来创建数组使用构造函数创建数组数组中的元素可以是任意的数据类型1、可以是对象2、可以是一个函数3、数组中也可以放数组,称为二维数组 文章声明: 学习地址1:谷粒学院学习地址2:BILIBILI尚硅…

18.4.1 考试解题报告 P71

题目:https://files.cnblogs.com/files/lovewhy/problem.pdf 偷偷摘来dalao题面。 P71竞赛时间:???? 年?? 月?? 日??:??-??:?? 题目名称智乃 麻耶惠 名称 kahuucino zyougamayanacumegu 输入 kahuucino.in zyougamaya.innacumegu.in …

P71-前端基础项目开发-网页导航栏开发首页header头部左侧导航栏

P71-前端基础项目开发-网页导航栏开发首页header头部左侧导航栏 1.概述 在首页header部分现在还有一个左侧的导航栏没有开发,下面就来完成这个导航栏。 2.首页header头部左侧导航栏 2.1.左侧导航栏需求 2.2.创建左侧导航栏结构 左侧的导航栏实际上是全部商品分类的…

SpringBoot笔记【P8-P71】

P8 核心配置文件 1. application.properties 2. 启动后控制台显示 3. 访问网址 P9 核心配置文件yml P10 核心配置文件同时存在 以application.properties为准 P13 多环境下配置文件properties P14 多环境下配置文件yml P15 获取自定义配置 P16 将自定义配置映射到对象 P18 a…

P71:子类继承了什么

** P71(子类继承了什么): ** 本节视频 父类中是 private 的成员变量在子类中不可用 解决这个问题两个方案: 将 private 改为 protected ,protected 代表同一个包内的其他类可以访问、子类可以访问先在父类做一个构造…

P71-枚举与选择排序

print() """ 注: 老师有口误,课内讲的是冒泡排序 但是是选择排序 标题没有错str() int() len() list() sorted() print() input() enumerate() : 函数用于讲一个可遍历的数据对象(如列表、元祖或字符串)组合为一个索引序列""&q…

thinkpad p71笔记本如何u盘装系统?

thinkpad p71笔记本如何u盘装系统?thinkpad p71系列是一款非常出色的便携式笔记本,办公性能也特别强劲,运行各大游戏也十分给力。大家拥有这款笔记本之后,想要了解thinkpad p71笔记本用u盘装系统并不难,接下来我们一起来看看详细…

谷粒商城P71抽取Category公共组件并在attrgroup.vue中使用

1.在modules/common/下新建category.vue 2.编写category.vue&#xff0c;只保留原来一部分简单内容 <!-- 公共组件 --> <template><el-tree :data"menus" :props"defaultProps" node-key"catId" ref"menuTree"><…