嵌入式C语言学习——基于Linux与GCC(二)

系列文章目录

一.C语言常用关键字及运算符操作


文章目录

  • 系列文章目录
  • 内存四区
  • 指针
    • 指针概述
    • 指针 + 修饰符
      • const
      • volatile
      • typedef
    • 指针+运算符
    • 多级指针
  • 数组
    • 数组空间
    • 字符空间及地址
  • 结构体、共用体
    • 定义、字节对齐
    • 位域
  • 内存分布图
  • 段错误分析


内存四区

C/C++语言的内存四区(栈区,堆区,全局区,代码区)(附图详解)
在这里插入图片描述

指针

指针概述

指针:内存类型资源地址、门牌号的代名词
指针变量:存放指针这个概念的盒子/存放地址
C语言*p、p以及&p的区别

简单来说 “ * ”是解引用操作符 “ & ”是取地址运算符
p存放的是地址,而*p是让程序去p储存的那个地址中取出数据,&p就是取指针p的地址

补; 在C 语言中 * 号有三个用途,分别是:
1.乘号,用做乘法运算,例如5*6
2.申明一个指针,在定义指针变量时使用,例如int *p;
3.间接运算符,取得指针所指向的内存中的值,例如printf(“%d”,*p);

c语言编译器对指针这个特殊的概念,有两个疑问?
1.分配一个盒子,盒子要多大?
在32bit的系统中,指针就4个字节,(可以表示2^32个地址,4GB的内存空间)
2.盒子里存放的的地址,所指向的内存的读取方法是什么?
char *p 一次读取1字节,8bit
int *p; 一次读取4字节,32bit
在这里插入图片描述

eg1:
#include<stdio.h>
int main()
{int *p_1;int *p_2;printf("the p_1 is %u,the p_2 is %u",sizeof(p_1),sizeof(p_2))	
}
结果:the p_1 is 8,the p_2 is 8   (64位处理器,8字节)

p1 = 0x1122;在32位CPU中,这个地址是不合法的
指针指向内存空间,一定要保证合法性。

eg2:
#include<stdio.h>
int main()
{int a = 0x12345678;int *p_1;p_1 = &a; //a的首地址(低位地址)赋给 p_1printf("the p_1 is %x\n",*p_1);
}
结果:the p_1 is 12345678
eg3:
#include<stdio.h>
int main()
{int a = 0x12345678;int *p_1;p_1 = &a; //a的首地址(低位地址)赋给 p_1printf("the p_1 is %x\n",*p_1); //%x是16进制输出
}
结果:the p_1 is 78

0x12是高位
在这里插入图片描述
0x78是低位

#include<stdio.h>
int main()
{float a = 1.2;char *p_1;p_1 = &a;printf("the p_1 is %x\n",*p_1);
}结果:the p_1 is ffffff9a //输出不是9a
修改:unsigned char *p_1 即可  //printf()把一些位当成了符号位

指针 + 修饰符

内存属性:
1.内存操作的大小
2.内存的可读可写性
指针指向的内存属性是什么?弄错会导致段错误。

const

常量、只读、不能变
char *p;

const char *p;     //地址指向的内存只读不可写,是字符串。并且注意地址是可变的。
char const *p;
char * const p;   //对固定地址进行读写,是硬件资源,地址固定,LCD
char *p const
const char * const p;    //地址和内容都不可变,对固定的地址只读,ROM
eg:
char *p = "hello world\n"; 编译器看到字符串默认是const型,空间只读不可写,字符串首地址给p
printf("the one is %x\n",*p);看字符串的第一个字符的ascii码
*p = 'a';  向p的地址指向的内存空间中进行写操作//会造成段错误、Segmentation fault、指针指向的内容被非法访问
printf("the %s\n",p);  //输出字符串

字符串是以地址的方式储存的,所以打印字符产只需要输入首地址,读到结束符\0结束

注:int printf(const char *format, ...);
上面例子第一行应该改为 const char *p = "hello world\n"
此时编译器会给出警告,并不会给出段错误。
char buf[] = {"hello world!\n"};  {}中的内容在静态区,只读不可写,但是将其值逐个赋给buf[],储存在可读写的区域。
char *p_2 = buf;//buf的首地址给p_2
*p_2 = 'a'; 将首地址中的内容改为'a'
printf("the %s\n",p_2);
结果:the aello world

volatile

防止优化指向内存地址
目的是去看硬件设备(eg:键盘)中的真实值,

volatile char *p;
while(*p == 0x10);
xxxx;

typedef

别名
char *p;
什么类型 变量名称;

char *name_t;     //name_t是一个指针,指向了一个char类型的内存
------
typedef char *name_t;  //name_t是一个指针类型的名称,指向了一个char类型的内存
name_t abc;

指针+运算符

+、-、++、–
指针的加法运算,实际上加的是一个单位,单位的大小可以使用sizeof()

 int *p =0x12;p+1 -->[0x12+1*(sizeof(*p)) ] -->0x16---------------------------------------char *p =0x12;p+1 -->[0x12+1*(sizeof(*p)) ] -->0x13
p++ / p- -;  p 的地址自加1,并将新的地址更新到p
与p+1的区别:p+1只查看不更新

[ ]
变量名[n]
n:ID 标签
地址内容的标签访问方式

p+n 得到的是以p为基地址加n个单位得到的地址
p[n] 得到的是以p为基地址加n个单位得到的地址中的内容

多级指针

数组

数组空间

字符空间及地址

结构体、共用体

定义、字节对齐

位域

内存分布图

段错误分析

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

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

相关文章

Django模板(四)

一、include标签 加载一个模板,并在当前上下文中进行渲染。这是一种在模板中 “包含” 其他模板的方式 简单的理解:在当前模板中引入另外一个模板内容 1.1、使用方法 模板名称可以是变量,也可以是单引号或双引号的硬编码(带引号)的字符串 {% include "foo/bar.ht…

ALBEF算法解读

ALBEF论文全名Align before Fuse: Vision and Language Representation Learning with Momentum Distillation&#xff0c;来自于Align before Fuse&#xff0c;作者团队为Salesforce Research。 论文地址&#xff1a;https://arxiv.org/pdf/2107.07651.pdf 论文代码&#xff1…

美国首届生成式人工智能与法律研讨(上)

美国首届生成式人工智能与法律研讨(上) 文章目录 美国首届生成式人工智能与法律研讨(上)前言一、引言二、生成式AI对法律的影响三、生成式AI与法律的跨学科研究3.1 确定和定义跨学科术语3.2 构建有价值的隐喻3.3 理解不断发展的商业模式四、生成式AI的独特性4.1 从执行狭义…

[OpenAI]继ChatGPT后发布的Sora模型解析与体验通道

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言OpenAI体验通道Spacetime Latent Patches 潜变量时空碎片, 建构视觉语言系统…

【RHCE】shell条件测试练习

目录 1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查次磁盘剩余空间。 2、判断web服务是否运行 3、使用curl命令访问第二题的web服务&#xff0c;看能否正常访问&#xff0c;如果能正常访问&#xff0c;…

《戴森球计划》好玩吗?《戴森球计划》怎么在苹果电脑上安装 戴森球计划攻略 Mac游戏推荐

《戴森球计划》是一款具有强大现实科学基础的模拟策略游戏&#xff0c;玩家的目标是构建能源效率极高的戴森球以解决能源问题。游戏的背景设定启发于科幻作品中的戴森球概念。游戏采用逼真的物理模拟&#xff0c;玩家需要合理规划资源&#xff0c;以应对复杂的能源危机。那么《…

【计算机网络】网络编程套接字UDP服务器客户端的简单模拟

需要云服务器等云产品来学习Linux的同学可以移步/–>腾讯云<–/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;优惠多多。&#xff08;联系我有折扣哦&#xff09; 文章目录 1. 前置知识1.1 源IP和目的IP1.2 端口号1.3 TCP协议和UDP协议初识1.4 网络字节序1.5 …

C# OpenCvSharp DNN Low Light image Enhancement

目录 介绍 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN Low Light image Enhancement 介绍 github地址&#xff1a;https://github.com/zhenqifu/PairLIE 效果 模型信息 Model Properties ------------------------- ------------------------------------------…

文献学习-1-Continuum Robots for Medical Interventions

Chapt 5. 连续体机构分析 5.1 文献学习 5.1.1 Continuum Robots for Medical Interventions Authors: PIERRE E. DUPONT , Fellow IEEE, NABIL SIMAAN , Fellow IEEE, HOWIE CHOSET , Fellow IEEE, AND CALEB RUCKER , Member IEEE 连续体机器人在医学上得到了广泛的应用&a…

卷积神经网络的基本结构

卷积神经网络的基本结构 与传统的全连接神经网络一样&#xff0c;卷积神经网络依然是一个层级网络&#xff0c;只不过层的功能和形式发生了变化。 典型的CNN结构包括&#xff1a; 数据输入层&#xff08;Input Layer&#xff09;卷积层&#xff08;Convolutional Layer&#x…

Avalonia学习(二十四)-系统界面

目前项目式练习&#xff0c;界面内容偏多&#xff0c;所以不给大家贴代码了&#xff0c;可以留言交流。此次为大家展示的是物联项目的例子&#xff0c;仅仅是学习&#xff0c;我把一些重点列举一下。 界面无边框 以前的样例主要是通过实现控件来完成的&#xff0c;前面已经有窗…

新算法UoT助力AI提问——主动寻求信息,任务完成率提高57.8%

引言&#xff1a;信息寻求在不确定性环境中的重要性 在不确定性环境中&#xff0c;信息寻求的能力至关重要。在许多实际应用中&#xff0c;如医学诊断和故障排除&#xff0c;解决任务所需的信息并非一开始就给出&#xff0c;而需要通过提问后续问题来主动寻求&#xff08;例如…

使用AndroidStudio调试Framework

1.前言 最近在工作过程中&#xff0c;涉及到FW的一些修改&#xff0c;比如PhoneWindowManager&#xff0c;只能通过加日志看打印的方式查看一些内容&#xff0c;比较低效&#xff0c;所以想了解一下FW的调试方式&#xff0c;后来发现AS就可以调试FW.我平时都是在Docker服务器编…

网站管理新利器:免费在线生成 robots.txt 文件!

&#x1f916; 探索网站管理新利器&#xff1a;免费在线生成 robots.txt 文件&#xff01; 你是否曾为搜索引擎爬虫而烦恼&#xff1f;现在&#xff0c;我们推出全新的在线 robots.txt 文件生成工具&#xff0c;让你轻松管理网站爬虫访问权限&#xff0c;提升网站的可搜索性和…

Redis(十四)双写一致性工程案例

文章目录 问题概述canal功能安装部署mysql配置canal服务端canal客户端&#xff08;Java程序&#xff09; 问题概述 canal https://github.com/alibaba/canal 功能 数据库镜像数据库实时备份索引构建和实时维护(拆分异构索引、倒排索引等)业务 cache 刷新带业务逻辑的增量数据…

OpenCV 4基础篇| 色彩空间类型转换

目录 1. 色彩空间基础2. 色彩空间类型2.1 GRAY 色彩空间2.2 BGR 色彩空间2.3 CMY(K) 色彩空间2.4 XYZ 色彩空间2.5 HSV 色彩空间2.6 HLS 色彩空间2.7 CIEL*a*b* 色彩空间2.8 CIEL*u*v* 色彩空间2.9 YCrCb 色彩空间 3. 类型转换函数3.1 cv2.cvtColor3.2 cv2.inRange 1. 色彩空间…

安达发|APS生产排程软件6大核心技术

APS生产排程软件是一种先进的生产计划和调度工具&#xff0c;它通过整合企业内外部资源&#xff0c;实现生产计划的优化和生产过程的自动化控制。APS生产排程软件的核心技术包括产品工艺数据管理&#xff08;PDM&#xff09;、客户需求管理&#xff08;CRM&#xff09;、高级计…

生成自己的rola模型简单版四步完成

工具准备&#xff1a;秋叶整合包&#xff0c;lora 训练器 秋叶整合包地址&#xff1a;https://pan.quark.cn/s/2c832199b09b#/list/share lora训练器地址&#xff1a;lora训练器_免费高速下载|百度网盘-分享无限制 (baidu.com) 第一章 图像预处理 根据自己需要准备一个图片…

软件工具安装遇到bug、报错不知道怎么解决?看这里!

前言 本文举例了几个常见的软件工具使用问题&#xff0c;文末会提供一些我自己整理和使用的工具资料 。 "在追逐零 Bug 的路上&#xff0c;我们不断学习、改进&#xff0c;更加坚定自己的技术信念。让我们相信&#xff0c;每一个 Bug 都是我们成长的机会。" 一、VM…

LeetCode 热题 100 | 二叉树(中下)

目录 1 基础知识 1.1 队列 queue 1.2 栈 stack 1.3 常用数据结构 1.4 排序 2 98. 验证二叉搜索树 3 230. 二叉搜索树中第 K 小的元素 4 199. 二叉树的右视图 菜鸟做题忘了第几周&#xff0c;躺平过了个年TT 1 基础知识 1.1 队列 queue queue<type> q…