【发布时间】:2013-02-04 02:01:58
【问题描述】:
好的,所以我对 c 中的结构完全陌生,我遇到了一个对我来说似乎很奇怪的问题。
当使用它的指针将一个简单的结构传递给一个函数时,该结构会自动采用该函数的其他参数之一,因为它是新数据。我不知道为什么会发生这种情况..
此时 move_walker() 应该什么都不做,对吧?
typedef struct {
int x,
y;
} walker_t;
walker_t* init_walker(int x, int y) {
walker_t walker;
walker.x = x;
walker.y = y;
walker_t *pointer = malloc(sizeof(walker));
pointer = &walker;
return pointer;
}
int move_walker(walker_t * walker, int direction) {
return 0;
}
walker_t* walker;
walker = init_walker(8,2);
printf("%d %d\n", walker->x, walker->y); //will print '8 2'
move_walker(walker, 3);
printf("%d %d\n", walker->x, walker->y); //will print '0 3'
(我很确定没关系,但这段代码实际上分布在多个文件中。)
【问题讨论】:
-
你打错了 ;-) 更改指针 = &walker; for *pointer = walker;
-
您为什么决定为此使用动态内存分配?
标签: c struct pass-by-reference