gpt4 book ai didi

c - 在C中的某个索引处分配指针的值

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:06 25 4
gpt4 key购买 nike

我试图理解这段代码:

struct mys {

double d[128];
};

void my_func(int iters) {
int i;

struct mys *ptr = malloc(iters *sizeof(struct mys));


for(i = 0; i < iters; i++) {
ptr[i].d[0] = (double)i;
}
free(ptr);
}

我所知道的:

mys 的大小为 8 * 128(double 的大小为 8,它是一个 数组code>128 double )

*ptr 的大小为 iters * (8 * 128)

这里发生了什么:

ptr[i].d[0] = (double)i;

?

我所知道的:

  // ptr->d is the address of the first part of d
// same as (*ptr).d
// BECAUSE d IS A STRUCT

// ptr->d[i] is the actual value. so, 0.0000
// same as (*ptr).d[i]

提前致谢。

ptr[i] 是索引 i 处的值,因此从 0.0000 开始。d 没有被初始化,它只是一个 struct 成员的名字。我们怎么能在这里 d 呢?

我的想法:

*ptr 是多个 (iters) 结构。

因此,ptr[0] 是第一个structptr[1] 是第二个struct

ptr[i].d 访问第 i 结构的 d 数组。

ptr[i].d[0] 访问 d 数组的第一个索引。所以上面的行将该数字设置为 double(i)

所以这实际上只是将每个结构的第一个元素设置为 0。我说得对吗?

但是当 iters2 时,我尝试:

for(int i = 0; i < iters; i++) {
printf("%p\n", ptr[200].d);
}

它仍然打印地址。这是为什么?

最佳答案

What is going on here: ptr[i].d[0] = (double)i;?

这个:

struct mys *ptr = malloc(iters *sizeof(struct mys));

为结构数组分配内存,称为 ptr .

这行代码:

ptr[i].d[0] = (double)i;

分配 i到数组的第一个单元格 d , 属于 i -th 结构,在数组 ptr 中.

i被转换到 double ,因为 d是一个 double 组,i声明为 int .


when iters is 2, and I try: for(int i = 0; i < iters; i++) { printf("%p\n", ptr[200].d); } it still prints an address. Why is that? Shouldn't it be out of range since ptr is only 2 structs?

这绝对超出了范围,因为数组是从 0 开始索引的。

但是,该尝试会调用 Undefined Behavior (UB),这意味着您不知道代码将如何运行。例如,在你的电脑上它打印一个地址,在我的电脑上它可能会导致段错误,等等......

关于c - 在C中的某个索引处分配指针的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55081116/

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