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