c - 访问存储在内存地址中的字节中的值
问题描述
假设我分配了一些内存并有一个指向它的指针。
Int *k = malloc(100);
将文件中的数据存储到此内存地址后,是否可以检索第 n 个字节的值?比如说我想知道第一个字节的 int 值。
解决方案
您可以像使用数组一样使用指针,索引访问是“只是”用于取消引用具有偏移量的地址的语法糖。k[n]
是一样的*(k + n)
。
k
要检查for指向的任何内存的第一个字节,请0xFF
编写以下代码:
if (*((char *)k + 0) == 0xFF) {
/* ... */
}
或者这样写:
if (((char *)k)[0] == 0xFF) {
/* ... */
}
或者这样写:
char* p = (char*)k;
if (p[0] == 0xFF) {
/* ... */
}
请注意,指针指向的元素类型很重要。试试这个例子,并从它的输出中学习:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int* pi = malloc(100 * sizeof *pi);
if (!pi) {
puts("Memory allocation error!");
return 1;
}
pi[3] = 23;
char* pc = (char*)pi;
printf("%d\n", pc[3 * sizeof (int)]);
printf("pi: %p %p\n", pi, pi + 3);
printf("pc: %p %p\n", pi, pc + 3);
return 0;
}
推荐阅读
- html - display:none 在 Outlook 中不一致,但在 chrome 中有效
- javascript - 在查询 API 端点之前无法获取地理位置数据
- bash - 如何使用 sed 命令替换文件中两个单引号之间的文本?
- machine-learning - 神经网络 :: 在不知道类总数的情况下进行分类
- reactjs - 如何将函数指定为具有默认值的钩子的可选参数
- python-3.x - Python + Selenium 需要新窗口
- sql - 如何运行将数据作为 nvarchar 传递的过程?
- java - 将二进制搜索转换为使用递归
- python - 在我第一次从 Docker PHPMyAdmin 连接到 mySQL 实例之前,无法从 Tortoise/Python 连接到 Docker mySQL 实例
- solana - 在命令行上通过 SPL 在 solana 上创建令牌时出现问题