c2-C语言--指针

1.用一级指针遍历一维数组
结论
buf[i]<===>*(buf + i) <===> *(p + i)<===> p[i]
 

#include <stdio.h>

int main(){
    int buf[5] = {10,20 ,30 ,40,50};
//buf[0]  --- int
// buf  --&buf[0]  =----int *
    int *p =buf;//&buf[0]  --- &*(buf+0)
    printf("%p\n",p);
    printf("%p\n",&buf[0]);

    printf("%p\n",p+1);//0x7ffc2eb07e74  偏4

    printf("%p\n",(&buf+1));//0x7ffc2eb07e84 偏20


    return 0;

}

一维数组 &a[O]和&a之间的关系
 

a[O]为int类型,故&a[O]+1一次偏移一个int类型的大小,4 bytes。
a为int [5]类型,故&a +1一次偏移一个int [5]类型的大小,20 bytes。
 

内存模型

1.定义数组是在栈区申请空间,栈区的空间有读写的权限,可以修改数据。
 

2定义指针保存字符串,指针变量是在栈区申请的空间,字符串是在常量区分配。

指针保存的是内存中常量区空间的地址,常量区空间只有读权限,没有写权限,不能更改数据。
 

内核空间和用户空间
对于32位环境,理论上程序可以拥有4GB的虚拟地址空间,我们在C语言中使用到的变量、函数、字符串等都会对应内存中的一块区域。但是,在这4GB的地址空间中,要拿出一部分给操作系统内核使用,应用程序无法直接访问这一段内存,这一部分内存地址被称为内核空间(Kernel Space) 。
而Linux默认情况下会将高地址的1GB空间分配给内核。也就是说,应用程序只能使用剩下的3GB的地址空间,称为用户空间(User Space)。下图是Linux下32位环境的一种经典内存模型:

一级指针的特点

1.在32bit的操作系统中,所有的指针类型都是占4bytes .
2.大端模式:低地址存高位
小端模式:低地址存低位
3.不同类型的指针的,同对一块内存对齐的时候,读取的位它保存对象的大小的.
char *p;
short *q;

int*m;

*p ;//1

*q; //2

*m;//4
 

我的总结;

对齐的时候

移动的时候

应该是说指针偏移:

当不同类型的指针指向同一块内存,并且对齐要求得到满足时,读取指针所指向对象的大小是由指针的类型决定的。指针的类型决定了指针的步长,即指针在内存中移动的字节数。

例如,假设有一个`int`类型的指针`int* p`和一个`char`类型的指针`char* q`,它们都指向相同的内存块,且内存对齐要求得到满足。那么,使用`*p`来读取该内存块中所保存的对象时,将会按照`int`类型的大小来读取,即读取4个字节;而使用`*q`来读取同一块内存时,则按照`char`类型的大小来读取,即读取1个字节。

这是由于指针在进行间接访问时会根据自身的类型确定要读取的字节数。指针类型与所指向对象的大小息息相关,不同类型的指针具有不同的步长,因此读取的字节数目也会不同。

不同类型的指针,在移动的时候,每次移动的大小也是它保存对象的大小
 

指针数组

不要只看答案:  思考 ,  为什么 这么巧妙:   可以处理的额:刚好 是在哎 指针 数组里面,  刚好 成员 移动一个 就是 对方的地址;

二级指针 来保存  指针数组的首地址

二级指针可以用来保存指针数组的首地址。指针数组是一个数组,其中每个元素都是一个指针。而二级指针是一个指针,它可以指向其他指针的地址。

假设有一个指针数组`int* arr[]`,它存储了一组`int`类型的指针。如果我们要保存指针数组的首地址,可以使用一个二级指针进行存储。

示例代码如下所示:

```c++
int* arr[5]; // 假设有一个指针数组
int** ptr = arr; // 使用二级指针保存指针数组的首地址
```

在上述代码中,`arr`是一个指针数组,每个元素都是`int*`类型的指针。`ptr`是一个二级指针,它被赋值为`arr`,即保存了指针数组的首地址。

通过使用二级指针,我们可以在需要的时候获取到指针数组的首地址,并通过间接操作来访问或修改指针数组中的元素。

扩展小知识:

3 写出int 、bool、 float 、指针变量与 “零值”比较的if 语句

//int与零值比较
if ( n == 0 )
if ( n != 0 )

//bool与零值比较
if (flag) // 表示flag为真
if (!flag) // 表示flag为假

//float与零值比较
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON) //其中EPSINON是允许的误差(即精度)。

//指针变量与零值比较
if (p == NULL)
if (p != NULL)

再扩充:

4 结构体可以直接赋值吗

  • 声明时可以直接初始化,
  • 同一结构体的不同对象之间也可以直接赋值,但是当结构体中含有指针“成员”时一定要小心。
    注意:当有多个指针指向同一段内存时,某个指针释放这段内存可能会导致其他指针的非法操作。因此在释放前一定要确保其他指针不再使用这段内存空间

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

统一存储、全闪阵列、分布式NAS,企业级存储概述

Infortrend普安科技即将迎来公司成立30周年华诞。Infortrend普安科技从无到有&#xff0c;由小做强&#xff0c;为全球用户提供高性能、高可靠、高扩展、环保节能的存储解决方案&#xff0c;在存储领域造就了一段品牌佳话。从1993年成立伊始&#xff0c;Infortrend一直致力于企…

云服务器哪家便宜?亚马逊云科技按需选实例够便宜

随着云计算的迅猛发展&#xff0c;越来越多的企业和个人开始关注云服务器的选择。在众多云服务提供商中&#xff0c;亚马逊云科技&#xff08;Amazon Web Services&#xff0c;AWS&#xff09;凭借其强大的基础设施和丰富的服务&#xff0c;备受业界青睐。本文聚焦一个备受关注…

【lesson3】数据库表的操作

文章目录 创建修改修改表名增加表类型修改表的某一类型的类型修改表某一类型的类型名 删除删除表的某一列删除表 查看查看表信息查看表内容 创建 建表指令&#xff1a; 查看是否建表成功&#xff1a; 查看表的具体信息&#xff1a; 修改 修改表名 法一&#xff1a;修改…

基础宠物商店管理系统(Java)大一程序设计

一.开发环境 Windows 11 -- JDK 21 -- IDEA 2021.3.3 二.需求 三.代码部分 //创建一个宠物类&#xff0c;被另外两类继承public class Pet {private String name;private int age;private String gender;private double cost0;//买进价格private double sellprice0;//卖出价…

hdlbits系列verilog解答(mt2015_q4a)-52

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 本次我们实现一个简单的组合逻辑输出。 z (x^y) & x 模块声明&#xff1a; module top_module (input x, input y, output z); 二、verilog源码 module top_module (input x, input y, output z);assig…

CRM系统是怎样帮助团队处理业务的?

客户关系管理的核心思想是将企业的客户作为最重要的资源&#xff0c;提供优质的客户服务&#xff0c;满足客户的需求&#xff0c;保证实现客户的终生价值&#xff0c;这也是众多企业使用CRM系统的原因。那么&#xff0c;CRM如何帮助中小企业解决业务与团队之间的问题&#xff1…

如何通过IDM进行统一权限

IDM身份管理平台在当今企业信息化建设中扮演着至关重要的角色&#xff0c;它不仅仅关乎用户身份的管理&#xff0c;更牵涉到对企业内部各种资源的合理分配和访问控制。其中&#xff0c;统一权限是 IDM 的一个核心概念&#xff0c;它通过集中管理用户的身份和访问权限&#xff0…

【Spring】Spring统一功能处理

Spring统一功能处理 拦截器拦截器什么是拦截器拦截器的基本使用定义拦截器注册配置拦截器 拦截器详解拦截器的拦截路径配置拦截器实现原理初始化处理请求 适配器模式 统一数据返回格式统一数据返回格式快速入门 统一异常处理 拦截器 场景: 我们要对一个网站实现强制登陆的功能…

mysql:通过INFORMATION_SCHEMA数据库查询表的元信息

使用SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA database_name AND TABLE_NAME table_name;查询某个表的元信息。其中database_name替换为数据库名称&#xff0c;table_name替换为表的名称。 例如&#xff0c;下面语句&#xff0c;查询development数据库中…

二、如何保证架构的质量、架构前期准备、技术填补与崩溃预防、系统重构

1、如何保证架构的质量 -- 稳定性和健壮性 2、正确的选择是良好的开端 -- 架构前期准备 ① 架构师分类&#xff1a;系统架构师、应用架构师、业务架构师 3、技术填补与崩溃预防 4、系统重构

时间序列预测实战(二十四)PyTorch实现RNN进行多元和单元预测(附代码+数据集+完整解析)

一、本文介绍 本篇文章给大家带来的是利用我个人编写的架构进行RNN时间序列卷积进行时间序列建模&#xff08;专门为了时间序列领域新人编写的架构&#xff0c;简单且不同于市面上大家用GPT写的代码&#xff09;&#xff0c;包括结果可视化、支持单元预测、多元预测、模型拟合…

【Python必做100题】之第四题(判断素数)

素数&#xff1a;约数只有1和本身的数叫素数 代码如下&#xff1a; a int(input("请随机输入一个数字&#xff1a;")) #键盘随机输入一个数字进行判断 flag False for i in range(2,a):if a % i 0: #在(2&#xff0c;a-1)之间但凡有一个可以整除就不是素数break…

MyBatis进阶之分页和延迟加载

文章目录 分页1. RowBounds 分页2. PageHelper 分页3. PageInfo 对象属性描述 延迟加载立即加载激进式延迟加载真-延迟加载 分页 Mybatis 中实现分页功能有 3 种途径&#xff1a; RowBounds 分页&#xff08;不建议使用&#xff09;Example 分页&#xff08;简单情况可用)Pag…

一个适用于搭建企业内部培训平台的开源系统

大家好&#xff0c;我是 Java陈序员。 问君能有几多愁&#xff0c;唯有开源项目解千愁&#xff01; 最近领导给了个任务&#xff0c;搭建一个企业内部培训平台&#xff01;好不容易刚完成上个任务&#xff0c;又来一个活&#xff0c;这不又得加班了&#xff01; 还好&#x…

Oracle(2-14)User-Managed Incomplete Recovery

文章目录 一、基础知识1、Incomplete Recovery Overview 不完全恢复概述2、Situations Requiring IR 需要不完全恢复的情况3、Types of IR 不完全恢复的类型4、IR Guidelines 不完全恢复指南5、User-Managed Procedures 用户管理程序6、RECOVER Command Overview 恢复命令概述7…

基于Java的高校教学业绩信息管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本高校教学业绩信息管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的…

使用Git进行版本控制

参考&#xff1a;《Python编程从入门到实践》 前言1、安装、配置 Git1.1 在Linux系统中安装Git1.2 在OS X系统中安装Git1.3 在Windows系统中安装Git1.4 配置Git 2、创建项目3、忽略文件4、初始化仓库5、检查状态6、将文件加入到仓库中7、执行提交8、查看提交历史 前言 版本控制…

GridBagLayout GridBagConstraints 笔记231130

实例化使用模板 GridBagLayout gbl new GridBagLayout(); // gbl.columnWidths new int[]{200,200,200}; // 用数组设置列 // gbl.rowHeights new int[]{100,100,100,100,100}; // 用数组设置行GridBagConstraints gbc new GridBagConstraints();/*** gridBagConstrain…

2023,还不知道什么是iPaaS的企业要亏大了!

iPaaS是一种基于云的工具&#xff0c;用于将现有的应用程序和数据流链接到新的服务当中。本文就来介绍关于iPaaS的诞生历程和优势。 2023年&#xff0c;还不知道iPaaS是什么的企业亏大了&#xff01; iPaaS是什么 iPaaS是Intergration Platform as a Service&#xff08;集成平…

经典目标检测YOLO系列(一)引言_目标检测架构

经典目标检测YOLO系列(一)引言_目标检测架构 一个常见的目标检测网络&#xff0c;其本身往往可以分为一下三大块&#xff1a; Backbone network&#xff0c;即主干网络&#xff0c;是目标检测网络最为核心的部分&#xff0c;backbone选择的好坏&#xff0c;对检测性能影响是十…