gpt4 book ai didi

c - 指针不指向

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

我有这个代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


// Library stuff

typedef struct {
int x, y;
} _TYPE_position;

typedef struct {
char image[32];
_TYPE_position position;
} _TYPE_object;

_TYPE_object *object;

int createObject(const _TYPE_object *insertionObject);
int createObject(const _TYPE_object *insertionObject) {
int index;
_TYPE_object *newObjectPtr = realloc(object, sizeof(*object) + sizeof(_TYPE_object));
if(newObjectPtr != NULL) {
object = newObjectPtr;
index = sizeof(*object) / sizeof(_TYPE_object) - 1;
strcpy(object[index].image, insertionObject->image);
object[index].position = insertionObject->position;
}
else {
index =- 1;
}
return index;
}


// Demo program

int main(void) {

_TYPE_object smile = {
"smile.png", { 112, 80 }
};

int smileIndex = createObject(&smile);

if(smileIndex == -1) {
printf("Error allocating memory for smile object");
while(1);
}

smile.position.x = 55; // Does nothing since the object does not point here for some reason

int i;
for(i = 0; i < sizeof(*object) / sizeof(_TYPE_object); i++) {
printf("Create %s at { %d, %d }\n", object[i].image, object[i].position.x, object[i].position.y);
}

return 0;
}

它有点管用。该对象似乎并未指向 _TYPE_object,而是创建了它的精确副本。

有没有办法让对象数组指向对象,而不是仅仅重新创建它们。所以在上面的例子中有 smile.position.x = 55;实际上更改打印的值。

最佳答案

忽略 sizeof()问题,这里的问题是您正在制作 _TYPE_Object 的显式副本给 createObject() 的字段,包括位置,通过做:

object[index].position = insertionObject->position;

因此,当您更改原件(通过 smile.position.x = 55 )时,没有理由修改副本中的位置(即您正在打印的内容)。

如果你想插入对原始对象的引用而不是复制,那么你必须创建一个指针数组而不是对象本身的数组。

关于c - 指针不指向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17260438/

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