首页 > 解决方案 > 访问存储在内存地址中的字节中的值

问题描述

假设我分配了一些内存并有一个指向它的指针。

 Int *k = malloc(100);

将文件中的数据存储到此内存地址后,是否可以检索第 n 个字节的值?比如说我想知道第一个字节的 int 值。

标签: cmemoryintbyte

解决方案


您可以像使用数组一样使用指针,索引访问是“只是”用于取消引用具有偏移量的地址的语法糖。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;
}

推荐阅读