Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C/C+中的内存分配+; 当你在C或C++中声明int类型的变量x时,我知道它将占用4字节的内存。因此,为该变量分配了4个内存地址。我的问题是我能看到分配给这个变量的所有四个内存地址吗?我知道这不是一个典型的问题,但我很好奇。或者它总是100%只包含内存地址&x和接下来的3位?如果是内存地址1000,那么下一个将是1001、1002和1003?它有没有偏离这一点_C++_C_Memory - Fatal编程技术网

C/C+中的内存分配+; 当你在C或C++中声明int类型的变量x时,我知道它将占用4字节的内存。因此,为该变量分配了4个内存地址。我的问题是我能看到分配给这个变量的所有四个内存地址吗?我知道这不是一个典型的问题,但我很好奇。或者它总是100%只包含内存地址&x和接下来的3位?如果是内存地址1000,那么下一个将是1001、1002和1003?它有没有偏离这一点

C/C+中的内存分配+; 当你在C或C++中声明int类型的变量x时,我知道它将占用4字节的内存。因此,为该变量分配了4个内存地址。我的问题是我能看到分配给这个变量的所有四个内存地址吗?我知道这不是一个典型的问题,但我很好奇。或者它总是100%只包含内存地址&x和接下来的3位?如果是内存地址1000,那么下一个将是1001、1002和1003?它有没有偏离这一点,c++,c,memory,C++,C,Memory,也就是说,我设置x=5 这是否意味着在这个存储位置1000到1002中,它将被零填充,而在1003中,在最右边的位置有一个101(5的二进制表示) 谢谢一个int可以是四个字节,尽管这实际上取决于编译器。因此,为什么会有特定的尺寸类型,如uint32\u t。但是为了论证起见,我们假设您的int是四个字节 是的,这四个字节是连续的。因此,&x和接下来的三个字节是变量的位置,这是正确的 然而,您认为最右边的字节是最不重要的字节的假设仅适用于机器。在一个小的endian架构(如x86)上,最左边的字

也就是说,我设置x=5

这是否意味着在这个存储位置1000到1002中,它将被零填充,而在1003中,在最右边的位置有一个101(5的二进制表示)

谢谢

一个
int
可以是四个字节,尽管这实际上取决于编译器。因此,为什么会有特定的尺寸类型,如
uint32\u t
。但是为了论证起见,我们假设您的
int
是四个字节

是的,这四个字节是连续的。因此,
&x
和接下来的三个字节是变量的位置,这是正确的


然而,您认为最右边的字节是最不重要的字节的假设仅适用于机器。在一个小的endian架构(如x86)上,最左边的字节将包含表示数字5的
101

int的大小并不总是4字节,我们只知道

char <= short <= int <= long <= long long

char几个不准确之处:

  • int
    的大小取决于平台(尽管在大多数情况下确实是4字节)

  • 你说的“看地址”是什么意思?如果您想通过调试器观察它,那么只需继续,您很可能还会看到相邻的地址。如果要访问
    int
    变量中的特定地址,则可以使用
    char
    指针轻松访问:

    intx=5

    char*p=(char*)&x


    您可以使用
    p[i]
    来访问范围
    0中的任何地址
    int
    的内存保证是连续的,尽管它不一定是4个字节。另一个问题取决于系统的端性。什么是。
    &x
    将为您提供第一个字节的地址。内存由多块内存芯片组成。它们以2D矩阵的形式组织,列表示内存地址,而每行由4字节长的内存块组成。一行可以有32字节或64字节的连续内存块。一个int是4字节长的,所以它只需要32字节长的内存芯片中的一个地址和一块内存。“一个int可以是四个字节,尽管这实际上取决于编译器。”更像是“取决于架构/ABI”。酷!我很高兴你们包括了big endian和little endian,我正在接受一个机器组织,并且刚刚开始谈论这些东西。谢谢
    #include <stdio.h>
    
    void main() {
        int A = 10;
        int *intPtr;
        char *charPtr;
        size_t size = sizeof(int);
        size_t i;
    
        intPtr = &A;
        printf("%d\n", *intPtr);
    
        charPtr = (char*) intPtr;
        for (i = 0; i < size; i++) {
            printf("%d\n", *(charPtr++));
        }
    
    }