有没有办法将指针(在main()
函数中初始化)移动到第一个可执行函数并让它在整个程序中可访问?
以下是代码:
main函数,其中指针d
已初始化:
void main(){
int x;
deque *d;
d=(deque*)malloc(sizeof(deque));
initDeque(d);
我希望将指针移动到名为initDeque()
void initDeque(deque *d){ //Create new deque
d->front=NULL;
d->rear=NULL;
}
是否可以移动它?
答案 0 :(得分:1)
如果通过“移动指针”意味着您想要移动变量声明,那么您可以这样做,但它将成为只能在该函数内访问的局部变量。显然不是你想要的。
您需要将其设为全局,这样才能从所有范围访问它。请注意,全局变量被认为是丑陋的并且增加了出错的风险,并且通常会使代码变得不那么清晰。
使用全局指针,它看起来像这样:
deque *d;
void initDeque(void)
{
d = malloc(sizeof *d);
d->front = d->rear = NULL;
}
请注意shouldn't cast the return value of malloc()
in C。
另请注意, nobody 将使用单个小写字母命名的全局变量。 方式很容易将它与局部变量混淆,所以你应该至少使名称更明显,例如
之类的东西deque *theDeque;
答案 1 :(得分:1)
创建一个静态结构来存储您想要的所有共享。 创建一个分配你的双端队列的功能。我不知道deque的大小,也许你可以把它放在堆栈而不是堆上。
static struct {
deque d*;
} _G;
void main(){
int x;
_G.d = deque_new();
}
deque *deque_new(void){
deque *d;
d = malloc(sizeof(deque));
d->front=NULL;
d->rear=NULL;
return d;
}
或使用堆栈
static struct {
deque d;
} _G;
void main(){
int x;
deque_init(&_G.d);
}
deque *deque_init(deque *d){
memset(d, 0, sizeof(*deque));
return d;
}