一点C知识:数据类型和内存地址。
作者:小教学发布时间:2023-10-03分类:程序开发学习浏览:88
导读: 当你需要存储一份数据到内存里的时候,你需要通过需要存储的方式和精度,向操作系统申请一份内存地址,形容怎么样申请地址的关键字就是数据类型。 例如,3...
当你需要存储一份数据到内存里的时候,你需要通过需要存储的方式和精度,向操作系统申请一份内存地址,形容怎么样申请地址的关键字就是数据类型。
例如,32位的处理器就有着32位的地址位宽,定义了一个char类型的数据,就是申请了一个块地址长度为32为,存储的数据位宽为8位(一个字节)的内存地址。
通过指针和结构体可以精确地进行内存地址的指向和管理,但需要注意,定义他们本身也是需要申请一块地址来存储的。
int a = 20;
int *PtrRegAddr;
PtrRegAddr = &a;
PtrRegAddr = (int *)0x1000000;
*PtrRegAddr = 0x000000ff;
printf("PtrRegAddr的指向地址:%d\n",PtrRegAddr);
printf("a的地址:%d\n",&a);
printf("PtrRegAddr的指向地址:%d\n",&PtrRegAddr);
printf("PtrRegAddr的数值:%d\n",*PtrRegAddr);
例如:使指针PtrRegAddr指向地址0x1000000,通过更改指针的数值来直接修改地址0x1000000的数据。(这个代码在计算机上运行会报错,请使用嵌入式设备)
结构体则是一次申请了一组连续的空间进行数据存储。
例如:
struct
{
int index;
char buffer[4];
}reg_1;
reg_1.index = 0x01;
reg_1.buffer[0] = 0x00;
reg_1.buffer[1] = 0x01;
reg_1.buffer[2] = 0x02;
reg_1.buffer[3] = 0x03;
reg_1.buffer[4] = 0x04;
这里边int类型长度为4个字节,char类型只有一个字节。十六进制下,
int index = 0x01等价于8'h00_00_00_01
buffer[1]=0x01则是2’h01,但是因为结构体的原因,他们在内存上的真实空间是紧挨着的。
即:00_00_00_01 03_02_01_00 04_...
从低往高写。
这里可以体现出HDL中位宽思想的不同,HDL中的位宽都是以二进制数为前提设置的。这里的内存则是通过0x前缀存入的都是16进制数。
此外,使用细节:
指针的赋予地址:
在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:
type *var_name;
在这里,type 是指针的基类型,它必须是一个有效的 C 数据类型,var_name 是指针变量的名称。
用来声明指针的星号 * 与乘法中使用的星号是相同的。
但是,在这个语句中,星号是用来指定一个变量是指针。以下是有效的指针声明:
int *ip; /* 一个整型的指针 */
double *dp;/* 一个 double 型的指针 */
float *fp; /* 一个浮点型的指针 */
char *ch; /* 一个字符型的指针 */
所有实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,对应指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。
不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。
在赋予指向不同数据类型的指针地址的时候,需要约定好地址,
例如:
int *PtrRegAddr;
PtrRegAddr = (int *)0x1000000;
*PtrRegAddr = 0x000000ff;
int类型的指针,需要int地址。
struct REG_DEFINE{
int index;
char buffer[10];
};
struct REG_DEFINE *Regptr;
Regptr = (struct REG_DEFINE *)0x1000000;
结构体类型也不例外。
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 6鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 7鸿蒙HarmonyOS实战-ArkUI组件(GridRow/GridCol)
- 8[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 9鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版