如何解决c&c ++中的指针操作
|struct node {
int data;
struct node* next;
}
void push (struct node **head,int data) {
struct node* newNode = malloc (sizeof (struct node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
//I understand c version well.
C++ version
void Stack::push( void *data ) {
struct node *newNode = new node;
newNode->data = data;
newNode->next = head;
head = newNode;
}
在c ++中,head是堆栈类的私有或受保护成员,并声明为node * head。
问题:为什么在c ++中的push()调用之后head可以保留其值。
在c中,我们需要将其声明为**,因为我们想在push()函数调用之后更改头指针的值。在c ++代码中,调用后头部的变化不会丢失吗?
解决方法
这里的问题是您要与C ++进行比较的C代码并非真正相似。一个更好的例子是
typedef struct Node {
int data;
struct Node* pNext;
} Node;
typedef struct Stack {
Node* pHead;
} Stack;
void push(Stack* this,int data) {
Node* newNode = malloc (sizeof (Node));
newNode->data = data;
newNode->next = this->head;
this->head = newNode;
}
在此版本中,我们成功实现了push
,而不必花费**
。我们有某种方式,因为它是通过ѭ4间接间接获得的。但这与C ++的工作原理非常相似。可以将C ++视为将ѭ5传递为该函数的隐藏参数。
,在这种情况下,由于Stack::push
是非静态的,因此head
是this->head
的简写。因此ѭ9等于:
this->head = newNode;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。