指针的步长及意义(C语言基础)

news2024/11/24 17:01:08

指针的步长及意义

文章目录

  • 指针的步长及意义
  • 指针变量+1后偏移的字节数不同
  • 指针[解引用](https://so.csdn.net/so/search?q=解引用&spm=1001.2101.3001.7020)时取出的字节数不同
  • 其他例子

不同类型的指针有何不同的意义

  • 指针变量+1后跳跃字节数量不同
  • 解引用的时候,取出字节数量不同

指针变量+1后偏移的字节数不同

代码演示:(不同编译器下偏移值可能不同)

void test01()
{
	char * p1 = NULL;
	printf("%d\n", p1);
	printf("%d\n", p1 + 1);//+1偏移1个字节
	
	int * p2 = NULL;
	printf("%d\n", p2);
	printf("%d\n", p2 + 1);//+1偏移4个字节

	double * p3 = NULL;
	printf("%d\n", p3);
	printf("%d\n", p3 + 1);//+1偏移8个字节
}

运行结果:

在这里插入图片描述

总结:vs下常见指针的偏移值分别为:
char *:1个字节
int *:4个字节
double *:8个字节
数组指针:偏移整个数组大小
结构体指针:偏移整个结构体大小

指针解引用时取出的字节数不同

代码演示:

void test02()
{
	char buf[1024] = { 0 }; //1024字节
	int a = 1000; //4字节
	memcpy(buf, &a, sizeof(int));//内存拷贝函数
	char * p = buf;
	printf("%d\n", *(int*)p );//指针类型强制转换在对其解引用
}

运行结果:

在这里插入图片描述

总结:不同类型指针解引用时取出数据的字节数不同
VS下常见指针类型解引用时取出的字节数分别为:
char *:1个字节(通常需要强转)
指针解引用时取出数据的字节数不同
VS下常见指针类型解引用时取出的字节数分别为:
char *:1个字节(通常需要强转)
int * :4个字节

其他例子



// todo 字节序转换
#include <stdio.h>
#include <arpa/inet.h>
void printf_bin(int num) // 这个函数将整形变量以二进制的形式打印出来
{
    int i, j, k;
    unsigned char *p = (unsigned char *)&num + 3; // p先指向num后面第3个字节的地址,即num的最高位字节地址

    for (i = 0; i < 4; i++) // 依次处理4个字节(32位)
    {
        j = *(p - i);                // 取每个字节的首地址,从高位字节到低位字节,即p p-1 p-2 p-3地址处
        for (int k = 7; k >= 0; k--) // 处理每个字节的8个位,注意字节内部的二进制数是按照人的习惯存储!
        {
            if (j & (1 << k)) // 1左移k位,与单前的字节内容j进行或运算,如k=7时,00000000&10000000=0 ->该字节的最高位为0
                printf("1");
            else
                printf("0");
        }
        printf(" "); // 每8位加个空格,方便查看
    }
    printf("\r\n");
}

int main()
{

    char buf[4] = {192, 168, 1, 2}; // 32位

    // todo1 将 4字节(32位)的数据存放在 num容器(int 类型, 32位)中
    unsigned int num = *(unsigned int *)buf; // int*把buf(char类型的数组首地址强转为int*类型的地址),
                                             // 再*(解引用)取出四个字节的数据,而int 类型刚好是4字节,就能存放这四字节数据

    // 你可以把 int num 当成是定义了一个能存放32位数据的容器,只是这32位存放的是
    // 192.168.1.2 的用二进制(01)表示的情况

    printf_bin(num);

    printf("%u\n", num); //%u用于打印 unsigned int .
    // 打印结果 33663168 . 这么大是因为 他不会每八位隔断,每八位分别做二进制转换
    //(像把 00000010 00000001 10101000 11000000)隔断为 192.168.1.2 而是
    // 直接将这个32位的数作为整体进行二进制转换
    printf("================");
    int n1 = 33663168; // 实际上这个十进制数用二进制的表示就是 00000010 00000001 10101000 11000000
    printf_bin(n1);
    // htol() 函数的作用是将一个32位数从主机字节顺序转换成网络字节顺序。
    unsigned int sum = htonl(num);
    printf_bin(sum); // 11000000 10101000 00000001 00000010  和 num中的二进制位是相反的
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虹科方案 | 制药环境中冰箱温度记录的最佳实践——全集成温度监测系统

有效监测冰箱温度是药店、医疗中心和制药实验室的一项重要要求。保持准确的冰箱温度记录对所有储存处方药和疫苗的设施来说是必不可少的&#xff0c;但实现这一目标的最佳方法是什么&#xff1f;● 制药机构需要在特定的温度下储存疫苗和处方药&#xff0c;以保证病人的安全并确…

微信小程序-常用api

文章目录微信小程序-常用api路由wx.switchTab(Object object)wx.navigateTo(Object object)wx.navigateBack(Object object)wx.redirectTo(Object object)提示wx.showToast(Object object)wx.showModal(Object object)wx.showLoading(Object object)wx.showActionSheet(Object …

了解线程池newFixedTheadPool

什么是线程池 操作系统 能够进行运算 调度 的最小单位。线程池是一种多线程处理形式。 为什么引入线程池的概念 解决处理短时间任务时创建和销毁线程代价较大的弊端&#xff0c;可以使用线程池技术。 复用 饭店只有一个服务员和饭店有10个服务员 线程池的种类 newFixedThea…

Linux下载安装MySQL8的方式,并开放外网访问

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

软考的证书含金量高吗?

因为该考试还具有水平考试性质&#xff0c;报考任何级别不需要学历、资历条件&#xff0c;只要达到相应的专业技术水平就可以报考相应的级别。考试合格者将颁发由中华人民共和国人力资源和社会保障部、工业和信息化部用印的计算机技术与软件专业技术资格&#xff08;水平&#…

Flutter Web:图片相关及跨域问题

加载网络图片 在flutter web上也可以使用Image这个widget来加载显示图片。但是涉及到网络图片的时候就可能会出现问题&#xff0c;现象是不显示图片&#xff0c;控制台报错&#xff1a; Failed to load network image. Image URL: https://cdnimagelive.knowbox.cn/image/7841…

2023年上半年软考高项报名条件-信息系统项目管理师

信息系统项目管理师是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目之一&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资…

62 序列到序列学习(seq2seq)【动手学深度学习v2】

62 序列到序列学习&#xff08;seq2seq&#xff09;【动手学深度学习v2】 深度学习学习笔记 学习视频&#xff1a;https://www.bilibili.com/video/BV16g411L7FG/?spm_id_fromautoNext&vd_source75dce036dc8244310435eaf03de4e330 一个句子翻译到另一个句子。 seq2seq 最早…

经典网络模型系列——Swin-Transformer详细讲解与代码实现

经典网络模型系列——Swin-Transformer详细讲解与代码实现一、网路模型整体架构二、Patch Partition模块详解三、Patch Merging模块四、W-MSA详解五、SW-MSA详解masked MSA详解六、 Relative Position Bias详解七、模型详细配置参数八、重要模块代码实现&#xff1a;1、Patch P…

Android开发【金三银四】之OKhttp网络通讯socket

一、SOCKS代理 全能代理&#xff0c;就像有很多跳线的转接板&#xff0c;它只是简单地将一端的系统连接到另外一端。支持多种协议&#xff0c;包括http、ftp请求及其它类型的请求。它分socks 4 和socks 5两种类型&#xff0c;socks 4只支持TCP协议而socks 5支持TCP/UDP协议&am…

Java后端开发功能模块思路

文章目录前言一、查找接口及参数信息1.1 找访问路径1.2 参数及返回结果信息1.3 编写功能模块函数二、代码设计思路三、总结前言 对于正在学习Java后端开发的同学来说&#xff0c;对于Java后端功能模块的开发过程及思路要有一个整体清晰的流程。才能保证在开发过程中更加的顺畅…

哪些数据可以用在二手车买卖中?

近期&#xff0c;商务部副部长盛秋平表示&#xff0c;将着力稳定和扩大汽车消费&#xff0c;支持新能源汽车购买使用&#xff0c;扩大二手车流通。还将打通二手车信息平台&#xff0c;推广上海的汽车全生命周期信息平台和中国汽车流通协会有关经验做法&#xff0c;建设全国性的…

Python-项目实战--飞机大战-游戏背景(5)

目标背景交替滚动的思路确定显示游戏背景1.背景交替滚动的思路确定游戏启动后&#xff0c;背景图像会连续不断地向下方移动在视觉上产生英雄的飞机不断向上方飞行的错觉 -- 在很多跑酷类游戏中常用的套路游戏的背景不断变化游戏的主角位置保持不变1.1实现思路分析解决办法创建两…

计算机视觉框架OpenMMLab开源学习(三):图像分类实战

前言&#xff1a;本篇主要偏向图像分类实战部分&#xff0c;使用MMclassification工具进行代码应用&#xff0c;最后对水果分类进行实战演示&#xff0c;本次环境和代码配置部分省略&#xff0c;具体内容建议参考前一篇文章&#xff1a;计算机视觉框架OpenMMLab开源学习&#x…

计算机网络整理-问答

1. 程序工作的时候网络各层的状态 如下图所示&#xff1a; 1. TCP 在进行三次握手的时候&#xff0c;IP 层和 MAC 层对应都有什么操作呢&#xff1f; TCP 三次握手是通过在传输层建立连接的一个过程&#xff0c;在这个过程中&#xff0c;TCP 和 IP 层、MAC 层都起到了重要的…

ChatGPT API 本地如何调用

本文将会介绍&#xff0c;如何找到API文档和相应语言SDK&#xff0c;并使用PHP调用SDK实现本地请求API的完成过程及遇到的问题和解决方法。 API文档 1.打开官网 ChatGPT: Optimizing Language Models for Dialogue 2.找到API 3.查看文档 4.找到sdk库 OpenAI API 5.主流语言 …

2023年软考什么时候考试?

2023年软考各科目考试时间安排已确定&#xff01;中国计算机技术职业资格网发布了《2023年度计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试工作计划》&#xff0c;具体见下文。2023年度计算机软件资格考试&#xff08;初级、中级、高级&#xff09;上半年考试…

树莓派4b Raspberry Pi 4安装以前内置Python3.7版本的系统出现的一系列问题记录

今天想要重装树莓派系统&#xff0c;想装那种内置Python3.7版本的系统&#xff0c;从网上找到镜像源后烧录进去出现一系列问题&#xff1a; 烧录系统开机后&#xff0c;首先就出现报错&#xff1a; 上面显示一个问题就是&#xff1a;start4x.elf: is not compatible&#xff0…

Django自定义模板标签的使用详解

目录 1.创建子应用&#xff1a;python manage.py startapp test01 2.进行相关的配置 3.在新建的test01文件下创建urls.py(此处名称可变但注意上图) 4.在test01文件下创建名称为templatetags的文件夹 5.templatetags文件下继续创建几个py文件如下图​编辑 6.views视图函数…

走进独自开,带你轻松干副业

今天给大家分享一个开发者的福利平台——独自开&#xff08;点击直接注册&#xff09;&#xff0c;让你在家就能解决收入问题。 文章目录一、平台介绍二、系统案例三、获取收益四、使用平台1、用户注册2、用户认证3、任务报价五、文末总结一、平台介绍 简单说明 独自开信息科技…