C 打印整数变量占用的所有字节的地址

C 打印整数变量占用的所有字节的地址,c,memory-address,void-pointers,C,Memory Address,Void Pointers,这是密码- #include <stdio.h> int main() { char character_1 = '0'; int integer_1 = 12321; char character_2 = '1'; char character_3 = '2'; printf("Integer occupies %zu byte(s) of space.\n",sizeof(int)); printf("

这是密码-

#include <stdio.h>
int main()
{
    char character_1 = '0';
    int integer_1 = 12321;
    char character_2 = '1';
    char character_3 = '2';

    printf("Integer occupies %zu byte(s) of space.\n",sizeof(int));
    printf("Address of Integer 1: %p\n",(void*)&integer_1);
    printf("\n");

    printf("Character occupies %zu byte(s) of space.\n",sizeof(char));
    printf("Address of Character 1: %p\n",(void*)&character_1);
    printf("Address of Character 2: %p\n",(void*)&character_2);
    printf("Address of Character 3: %p\n",(void*)&character_3);
    printf("\n");
    return 0;
}

我想打印整型变量integer_1占用的所有四个字节的空间地址,这意味着打印这四个字节的地址-0000000000 61fe18、0000000000 61fe19、0000000000 61fe1a和0000000000 61fe1b。如何操作?

您需要将int指针转换为char指针或int8\t指针,然后逐步遍历每个字节,如下所示:

char *cp = (char*)&integer_1;
for (int i = 0; i < sizeof(integer_1); ++i)
    printf("Address of integer_1, byte %d: %p\n",i,cp++);

您需要将int指针强制转换为char指针或int8\t指针,然后逐步遍历每个字节,如下所示:

char *cp = (char*)&integer_1;
for (int i = 0; i < sizeof(integer_1); ++i)
    printf("Address of integer_1, byte %d: %p\n",i,cp++);

这就是你想做的吗

#include <stdio.h>

int main()
{
    int integer_1 = 12321;
    unsigned char* p = (unsigned char*)&integer_1;
    
    for (int i=0; i<sizeof(int); i++){
        printf("Address: %p -> Value: %02hhx\n", p+i, *(p+i));
    }
    return 0;
}

无论如何,您都必须完成对char*的转换,这就是您要做的吗

#include <stdio.h>

int main()
{
    int integer_1 = 12321;
    unsigned char* p = (unsigned char*)&integer_1;
    
    for (int i=0; i<sizeof(int); i++){
        printf("Address: %p -> Value: %02hhx\n", p+i, *(p+i));
    }
    return 0;
}

如果您必须执行对char*的强制转换,那么也可以通过void*p=&int来执行。@KPCT void指针的问题是C标准不允许使用指针算法,它可能会根据您使用的编译器工作,但这不是一种方法solution@ozerodb??? 这是什么时候开始的?已经使用void*w算法很长一段时间了,有多种编译器和体系结构。如果我没有弄错的话,这就是为什么不将malloc的输出强制转换为任何内容的原因之一。@KPCT我将再次查看该标准,但我记得使用void有一些限制pointers@ozerodb这是我喜欢虚空的一件事,你不受类型的限制,不是真的,您也可以通过void*p=&int来实现。@KPCT void指针的问题是C标准不允许使用指针算法,它可能会根据您使用的编译器而工作,但这不是一种可行的方法solution@ozerodb??? 这是什么时候开始的?已经使用void*w算法很长一段时间了,有多种编译器和体系结构。如果我没有弄错的话,这就是为什么不将malloc的输出强制转换为任何内容的原因之一。@KPCT我将再次查看该标准,但我记得使用void有一些限制pointers@ozerodb这是我喜欢虚空的一点,你不受类型的限制。