gpt4 book ai didi

c - (C) 我们可以通过哪些方式操作内存长度和地址?

转载 作者:行者123 更新时间:2023-11-30 16:20:22 24 4
gpt4 key购买 nike

我很难向很多人提出这个问题。如果这里有人可以帮助我阐明这一点,我将不胜感激,因为这是近三年来我的问题的最终障碍。

如果您了解数组和内存,则可以跳过最后一段来解决这个大问题,但如果您通读本文,它可能会帮助您理解我正在努力掌握的原因以及概念。

所以我们有一个初始化的数组

    int main(){    int x=10;    int arr[x]={3,5,1,9,4,17,2,12,6,8};

要访问数组的第 5 个元素,我们将按如下方式打印出来

    printf("%d",arr[4]);

现在,我的第一个问题围绕这个过程。 printf 函数定义我要打印一个整数,作为目录,我给它第一个元素的数组名称/地址,并指定我想要数组的第四个元素。

到目前为止我所掌握的信息让我相信每个整数占用 4 个字节的内存。通常,在类环境中,当教授解释这一点时,他们会将其画在黑板上

       0     1     2     3     4     5     6     7     8     9    [1000][1004][1008][1012][1016][1020][1024][1028][1032][1036]    {  3    5     1     9     4     17    2     12    6      8  }

现在,这都是基础知识,但在我学习计算机如何工作的过程中,我意识到一件非常重要的事情,计算机非常愚蠢,这就是我们对它们进行编程的原因,所以请耐心等待。

问题 1:这是内存的准确表示吗?这就是几乎每个人在 youtube 上、在教室等处所描绘的画面,一个从 1000 开始并增加 +4 的顺序列表,如果我有两个相同大小的数组怎么办?它们不能占用相同的内存地址,所以我如何跟踪位置。

问题2:我理解arr[4];指的是数组第4个位置的值。但是这个arr[4],它是什么? 4.这个4是否存储在内存中的某个地方?这个4是什么数据类型?它也是一个指针吗?我的理解是它是指针数组的扩展,这让我很困惑。因为数组指向位置 0 的第一个元素,所以指针“4”如何在指针内部共存?对于计算机来说,该过程是什么样的?我假设这不是问题,因为 4 是一个指针参数,因此可以存在于指示的数组指针中。

但是过程呢?是吗,去arr[0]然后从位置0开始数4个字节4次?位置 0 持有什么地址?我知道出于教学目的,它被想象为从 1000 开始,但情况总是如此吗?为什么不寻址 1036 并从那里开始数 4?我知道我在某处读到,内存地址通过确保 char(1 字节)是否存储在 int(4 字节)旁边的内存中来划分存储,然后之间存在内存间隙,使其全部可以被 2 整除。 p>

现在来回答我的最后一个问题,我在互联网上找不到任何相关内容。我可以以某种方式告诉计算机将索引 0 - n 的内存长度分配给变量吗?也许我问错了,所以让我改一下。是否有一种数据类型定义内存长度而不是位置?我知道我们可以访问某个变量占用的内存量,但要做到这一点,我们引用该变量并接收内存作为结果。我想为变量分配一段内存。

最佳答案

is there a data type that defines length of memory and not position?

C 中的所有数据类型都执行此操作。每种类型都定义了保存该类型需要多少字节以及每个字节中各个位的含义。这是实现定义的,因此不同的编译器和不同的目标对它们的定义不同,但该语言为您提供了编写可移植代码的工具,这些代码将以明确定义的方式工作,无论是什么。

  • sizeof 告诉您任何类型的大小(以字节为单位)。因此 sizeof(int) 会告诉您目标上的 int 有多大——通常为 4,但有些目标使用 8 或 2。
  • CHAR_BIT 告诉您一个字节的大小——一个字节中有多少位。您并不经常需要它,但当您需要时,它就可用。

关于c - (C) 我们可以通过哪些方式操作内存长度和地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55327711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com