你可能还想考虑一下,“createPlayer”函数感觉就像是在为应用程序创建一个新的玩家。在代码中,根据需要分配结构体的内存,并在使用完后释放该内存是惯例并非常强大的做法。这样做还可以让你在运行代码时创建任意多个“玩家”,并按照自己的喜好使用它们。
下面是一个示例,展示了如何使用动态内存分配(在程序执行时分配内存)。
让我们创建一个头文件(.h),用来存放我们的定义。
player.h:
#ifndef _PLAYER_H
#define _PLAYER_H
struct player {
char name[40];
int acceleration;
};
extern struct player * create_player(const char *name, int acceleration);
void delete_player(struct player *p);
const char * get_player_name(struct player *p);
void set_player_name(struct player *p, const char *name);
int get_player_accel(struct player *p);
void set_player_accel(struct player *p, int accel);
#endif
让我们创建一个 player.c 文件,其中包含在 player.h 中定义的函数的实现。
player.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "player.h"
定义用于管理结构分配的函数。
struct player * create_player(const char *name, int acceleration) {
struct player *new_player = malloc(sizeof(struct player));
if ( !new_player ) {
fprintf(stderr, "unable to allocate memory for a new player\n");
return NULL;
}
}
void delete_player(struct player *p) {
if (p)
free(p);
}
const char * get_player_name(struct player *p) {
if ( p )
return p->name;
else
return NULL;
}
void set_player_name(struct player *p, const char *name) {
if ( p ) {
strncpy(p->name, name, sizeof(p->name));
}
}
int get_player_accel(struct player *p) {
return p->acceleration;
}
void set_player_accel(struct player *p, int accel) {
if ( p )
p->acceleration = accel;
}
现在在您的代码的其他地方,您可以像这样使用上述函数:
main.c:
#include <stdio.h>
#include "player.h"
int main() {
struct player *player = create_player("john", 30);
if ( player ) {
printf("%s's acceleration is %d\n", player->name, player->acceleration);
}
}
使用您的C编译器编译两个C文件的程序(如果您正在使用C IDE,则将它们添加到项目中)。构建项目...
如果您正在使用命令行,则可以使用以下命令:
cc -o player_test player.c main.c
就可以了
注意事项
我没有使用C编译器就把这些都写出来了,所以可能会有一些语法错误...请从中感受C,而不是照字面意思使用它 :) 以防有愚蠢的错误。