将指针从main()移动到第一个可执行函数

时间:2015-02-25 12:20:14

标签: c pointers deque

有没有办法将指针(在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;
}

是否可以移动它?

2 个答案:

答案 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;
}