gpt4 book ai didi

c++ - 在C++中,fscanf如何分配内存地址?

转载 作者:行者123 更新时间:2023-11-28 05:29:23 26 4
gpt4 key购买 nike

我是 C++ 的新手,一直在想弄清楚 fscanf 如何将内存分配给堆栈。我写了一段代码,它从一个简单的文件中读取并将行值分配给一个数组。然后,我尝试打印出数组中每个元素的地址。

values = (double *)calloc(rows*columns, sizeof(double));

for (i = 0; i < rows; i++){
for (j = 0; j < columns; j++){
fscanf(input, "%s", buffer);
values[i*columns + j] = atof(buffer);
}
}


v = values;

for (i = 0; i < rows; i++){
for (j = 0; j < columns; j++){
printf("at [%d, %d] value %g\n", i, j, values[i*columns + j]);
printf(" address is 0x%x also 0x%x\n", &values[i*columns + j],
values + i*columns + j);

printf("*v is = %g and v = 0x%x \n\n", *v, v);
++v; /* increment v by 1*/
}
}

假设输入是一个 1x3 矩阵( vector )的 .txt 文件,其条目为 1 2 4。我得到以下结果。

在 [0, 0] 值 1
地址是 0xb51600 也是 0xb51600
*v = 1 且 v = 0xb51600

在 [0, 1] 值 2
地址是 0xb51608 也是 0xb51608
*v = 2 且 v = 0xb51608

在 [0, 2] 值 4
地址是 0xb51610 也是 0xb51610
*v = 4 且 v = 0xb51610

我无法理解的是,地址从 [0,0] 到 [0,1] 跳了 8 位,而从 [0,1] 到 [0,2] 只跳了 2 位。根据我从 C++ 书籍中读到的内容,我认为地址应该按数组声明的类型的大小递增。谁能提供一些关于此事的见解?

谢谢

最佳答案

What I cannot understand is the fact the address jumps by 8 from [0,0] to [0,1], while it only jumps by 2 from [0,1] to [0,2].

不,那又是 8 的跳跃。

记住,这是十六进制!

0x10 - 0x08 = 0x08
16 - 8 = 8

关于c++ - 在C++中,fscanf如何分配内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39873273/

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