C程序设计——指针杂谈0

变量和常量讲的差不多了,这里先把指针再深入理解一下,如果你是C语言初学者,本节可能看不太懂,没关系可以以后再看。

变量

当定义变量的时候,本质是在内存中分配了一段空间,这段空间的大小与变量的类型相关,C语言中,用sizeof(),可以求出各种类型变量空间大小(字节数):

int main(void)
{int iSize ;iSize = sizeof(char);printf("sizeof(char) is          %d\r\n", iSize);iSize = sizeof(short int);printf("sizeof(short int) is     %d\r\n", iSize);iSize = sizeof(int);printf("sizeof(int) is           %d\r\n", iSize);iSize = sizeof(long int);printf("sizeof(long int) is      %d\r\n", iSize);iSize = sizeof(long long int);printf("sizeof(long long int) is %d\r\n", iSize);iSize = sizeof(float);printf("sizeof(float) is         %d\r\n", iSize);iSize = sizeof(double);printf("sizeof(double) is        %d\r\n", iSize);printf("\r\n\r\n");iSize = sizeof(unsigned char);printf("sizeof(unsigned char) is          %d\r\n", iSize);iSize = sizeof(unsigned short int);printf("sizeof(unsigned short int) is     %d\r\n", iSize);iSize = sizeof(unsigned int);printf("sizeof(unsigned int) is           %d\r\n", iSize);iSize = sizeof(unsigned long int);printf("sizeof(unsigned long int) is      %d\r\n", iSize);iSize = sizeof(unsigned long long int);printf("sizeof(unsigned long long int) is %d\r\n", iSize);printf("\r\n\r\n");iSize = sizeof(char*);printf("sizeof(char*) is          %d\r\n", iSize);iSize = sizeof(short int*);printf("sizeof(short int*) is     %d\r\n", iSize);iSize = sizeof(int*);printf("sizeof(int*) is           %d\r\n", iSize);iSize = sizeof(long int*);printf("sizeof(long int*) is      %d\r\n", iSize);iSize = sizeof(long long int*);printf("sizeof(long long int*) is %d\r\n", iSize);}

运行结果如下:

说回指针,从上面的打印,我们可以看出,在我电脑上,指针类型的长度都是8字节。在这里我可以给大家一个结论,只要计算机确定了,指针类型的长度是确定的,指针变量的长度只可能是1、2、 4、8中的一个,与内核的地址空间相关。如果地址空间不超过256字节,那么指针变量的长度就是1;如果地址空间不超过64K字节,那么指针变量的长度就是2;地址空间不超过4G字节 ,指针长度就是4字节;地址空间超过4G字节 ,指针长度就是8字节。地址空间 8字节都表示不了的计算机,目前还没有被设计出来,所以指针长度 8 字节就到头了,不可能再大了。

变量的空间是由编译器和操作系统,按照既定的算法分配的,对程序员透明,如果没有指针,程序员,就只能访问自己定义的变量,即无法访问变量以外的内存空间。

指针所能实现的需求

通常,当你做底层开发时,需要按照芯片手册,访问特定地址的数据:

STC 89C51 单片机的串口控制器

上图是STC 89C51单片机,串口控制器的寄存器列表。表格的第二行,我们可以看出:SCON是一个8位的寄存器,地址是 0x98(98H 的后缀 H,表示98是个16进制数)。如果我们要访问 SCON,肯定不能直接 char SCON,因为定义变量,不能指定 SCON 的地址。怎么办呢?有一种实现方式是(这里 volatile 超纲了,先记住这个单词,具体含义,后面再讲):

int main(void)
{/* 因为 SCON 是一个8位的寄存器,因此定义一个无符号 char 型的指针。*/volatile unsigned char *SCON;SCON = 0x98;printf("%x", *SCON);
}

 

指针定义时的一些细节

下面这个代码,定义了一个无符号 char型的指针,表示指针的 “*”,是用来修饰 “SCON”的,而不是修饰类型 “unsigned char” 。

int main(void)
{unsigned char *SCON;
}

因此下面这个代码中,SCON 是 unsigned char 类型的指针,它的长度应该是8;cC是 unsigned char 类型的变量,它的长度应该是 1 。

int main(void)
{int iSize ;unsigned char *SCON, cC;iSize = sizeof(SCON);printf("sizeof(SCON) is   %d\r\n", iSize);iSize = sizeof(cC);printf("sizeof(cC) is     %d\r\n", iSize);
}

所以上面代码的运行结果是下面这样:

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

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

相关文章

Hackme靶机通关攻略

1.首先注册用户,登录 2.登录后,显示让我们查找自己喜欢的书,我们直接单击search,会列出很多书 3.随便选择一本书进行查询,与此同时进行抓包 4.放到重放器中,将数据改为1*,将数据包另存为1.txt&a…

Python pip 更换镜像源

文章目录 1 概述1.1 默认镜像,速度慢,易报错1.2 常用国内镜像源 2 更改镜像源2.1 临时更改2.2 永久更改2.2.1 查看配置源及配置文件2.2.2 编辑 pip.ini2.2.3 配置后的效果 1 概述 1.1 默认镜像,速度慢,易报错 默认镜像&#xff…

Win32设备I/O详解

Windows设备 在Windows平台下,设备被定义为能够与之进行通信的任何东西。最常见的 I/O 设备包括:文件、文件流、目录、物理磁盘、卷、控制台缓冲区、磁带驱动器、通信资源、mailslot 和管道等。 平常我们使用的文件,目录都可以称之为设备。…

MES系统:现代工厂生产车间的科技与管理创新

一、现代工厂生产车间:高度集成、自动化与智能化 在当今这个日新月异的工业时代,工厂生产车间已经远远超越了传统意义上的简单生产线概念,它们正逐步演变为一个高度集成、自动化与智能化的生态系统。这一变革不仅极大地提升了生产效率&#…

文件包含PHP伪协议利用方法

1、file 使用file协议读取Windows系统文件 2、php:filter协议 使用php://filter协议可以将php代码进行base64编码后显示出来 3、php://input 使用php://input协议可以将post请求的数据作为php代码运行 访问该协议并进行抓包 修改请求方式为POST 在下方输入php代码 点击forw…

【GIT】idea中实用的git操作,撤回commit,撤回push、暂存区使用

IDEA中最常见的UI操作:【GIT】Idea中的git命令使用-全网最新详细(包括现象含义) 文章目录 问题一: idea撤回仅commit错误的代码(仅本地仓库,因为还没推送到远程)问题二: idea撤回Com…

c++--智能指针(RAII)

智能指针可以帮助我们管理动态空间,即自动释放动态空间。 --------------------------------------------------------------------------------------------------------------------------------- 简单原理 事实上,智能指针的原理就是将指向动态空间…

浅谈人工智能之Windows:基于ollama进行本地化大模型部署

浅谈人工智能之Windows:基于ollama进行本地化大模型部署 引言 随着人工智能技术的飞速发展,大型语言模型(LLMs)已经成为推动自然语言处理领域进步的关键力量。然而,传统的云部署方式可能带来数据隐私、成本以及访问速…

【滑动窗口】将 x 减到 0 的最小操作数

将 x 减到 0 的最小操作数 将 x 减到 0 的最小操作数题目思路讲解代码书写 将 x 减到 0 的最小操作数 题目 题目链接: 将 x 减到 0 的最小操作数 思路讲解 按照题目的思路去做这一题是非常恶心的, 因此我们采用正难则反思路. 将问题转换为: 求中间某一个最长的数组长度, 使…

hyperf json-rpc

安装 安装docker hyperf 安装 hyperf-rpc-server-v8 (服务端) docker run --name hyperf-rpc-server-v8 \ -v /www/docker/hyperf-rpc-server:/data/project \ -w /data/project \ -p 9508:9501 -it \ --privileged -u root \ --entrypoint /bin/sh \…

Unity学习路线

目录 一、Unity官方推荐路线二、AI总结的学习路线1、Unity学习路线图(文言一心)一、基础入门(初级)二、进阶提升(中级)三、高级深入(高级)四、专家级探索 注意事项 2、Unity学习路线…

【2024 CCF编程能力等级认证(GESP)C++ 】 计算机基础知识

目录 1. 引言2. 计算机系统结构2.1 中央处理器(CPU - Central Processing Unit)2.1.1 运算器 2.1.2 控制器2.1.3 性能指标2.2 存储器2.3 输入设备2.4 输出设备 3. 计算机系统层次结构4. 操作系统4.1 操作系统分类4.2 操作系统常见操作4.2.1 基本开关机操…

Mqtt消费端实现的几种方式

此处测试的mqtt的Broker是使用的EMQX 5.7.1&#xff0c;可移步至https://blog.csdn.net/tiantang_1986/article/details/140443513查看详细介绍 一、方式1 添加必要的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spr…

直播相关概念

文章目录 1、腾讯云直播2、直播&#xff1a;视频直播3、常用的直播组合&#xff1a;4、推流&#xff1a;主播通过推流地址进行视频的推送5、拉流&#xff1a;观众通过拉流地址进行视频的播放6、准备工作6.1、进入腾讯云直播 1、腾讯云直播 直播即时聊天&#xff1a;打赏 文字 …

Linux运维--iptables防火墙命令以及端口号等详解(全)

Linux之iptable防火墙命令以及端口号等详解&#xff08;全&#xff09; 在Linux系统中&#xff0c;你可以使用firewalld和iptables来管理和设置防火墙规则。Firewalld是一个动态管理防火墙的工具&#xff0c;而iptables是一个更底层的工具&#xff0c;可以直接配置Linux内核的…

【重学 MySQL】一、数据库概述

【重学 MySQL】一、数据库概述 为什么要使用数据库数据库与数据库管理系统数据库&#xff08;Database&#xff09;数据库管理系统&#xff08;DBMS&#xff09;数据库与数据库管理系统的关系数据库是数据存储的容器数据库管理系统是数据库的管理者相互依存的关系数据库系统的组…

【网络安全】服务基础第一阶段——第六节:Windows系统管理基础---- DNS部署与安全

计算机智能识别并用IP地址定位&#xff0c;例如我们想要访问一个网页&#xff0c;其实是只能使用这个网页的IP地址&#xff0c;即四位的0&#xff5e;255来访问&#xff0c;但这一串数字难以记忆&#xff0c;于是就有了DNS&#xff0c;将难以记忆的数字转化为容易记忆的域名&am…

Elasticsearch 介绍

1、课程介绍 1.1 ES 8.x 演化进程 版本号发布日期多少个次要版本迭代历时8.02022年2月11日&#xff1f;至今7.02019年4月11日17个次要版本34个月6.02017年11月15日8个次要版本17个月5.02016年10月27日6个次要版本13个月 2、Elasticsearch 是什么 2.1 概念 2.1.1 标准定义 …

文件上传的学习

文件上传漏洞 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷&#xff0c;而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马&#xff0c;病毒&#xff0c;恶意脚本或者WebShell等。“文件上传”本身没有…

计算机二级 C程序设计(2020B场)全解

A选项&#xff1a;C语言中&#xff0c;一共有3种结构。分别是顺序结构、选择结构&#xff08;else-if语句&#xff09;、循环结构&#xff08;for、while语句&#xff09;。因此&#xff0c;C语言具有结构化特征。 B选项&#xff1a;不仅能解决简单问题&#xff0c;3种基本结构…