指针在函数中的作用域

指针通常用于函数中多个值的返回,而指针在函数内,其不被函数作用域所限制的只有通过指针来修改其指向的内存,而通过改向其指针方向是受到作用域的限制的。也就是说例如在函数中修改指针指向只在函数内有效,而在主函数中并没有被修改指向,但是在函数中修改指针指向的内存的值则是可以的。

1.在函数内改变指针指向只在函数内生效;
如下代码假如stack进入函数时地址520出来任然是520,不能通过直接给其赋值地址,如果需要实现出栈的话只能通过改变stack->val及stack->next的值来达到目的。见片段2.


ListNode *StackPull(ListNode* stack) {
    
    
    if (stack == NULL) {
    
    
       
      return NULL;
    }
    int data;
    data = stack->val;
    ListNode* temp;
    temp = stack;
    //cout << stack << "\n";
    stack= temp->next;
    return stack;
}

2.通过改变修改指针指向的内存的值达到出栈的目的。此时虽然stack的地址还是520但是stack->val的值发生改变了。

int StackPull(ListNode* stack) {
    
    
    if (stack == NULL) {
    
    
       
      return NULL;
    }
    int data;
    data = stack->val;
    ListNode* temp;
    temp = stack;
    //cout << stack << "\n";
    temp = temp->next;
    stack->val = temp->val;
    stack->next = temp->next;
    return data;
}

猜你喜欢

转载自blog.csdn.net/qq_38595432/article/details/120279078