struct snode *likstack likstack &s likstack s 这两个区别
时间: 2024-04-17 10:29:03 浏览: 13
这两个代码的区别如下:
1. `likstack &s`:这段代码声明了一个引用变量 `s`,它引用了 `likstack` 指针。这意味着对 `s` 的修改会直接影响到 `likstack` 指针所指向的内存区域。
2. `likstack s`:这段代码声明了一个新的指针变量 `s`,它与 `likstack` 指针是两个独立的指针。它们指向的内存区域可能是相同的,但对其中一个指针的修改不会影响到另一个指针。
总之,第一种情况是使用引用传递,可以直接修改原始指针的值。而第二种情况是创建了一个新的指针变量,它与原始指针是独立的,修改其中一个不会影响到另一个。
相关问题
struct snode *likstack likstack &s s=(snode*)malloc(sizeof(snode))
这段代码是首先声明了一个名为 `likstack` 的指向 `struct snode` 结构体的指针。然后,将 `likstack` 的地址赋值给变量 `s`,使得 `s` 指向了 `likstack` 指针所指向的结构体。接着,通过 `malloc` 函数分配了足够大小的内存空间来存储 `snode` 结构体,并将返回的指针强制类型转换为 `snode*` 类型,并将其赋值给变量 `s`。这样,变量 `s` 就指向了一个动态分配的 `snode` 结构体。
补全链表栈代码typedef struct SNode{ ElemType data; struct SNode *next; }SNode, *Stack; Status IsEmpty(Stack S)
{
return S == NULL;
}
Status Push(Stack *S, ElemType e)
{
SNode *p = (SNode*)malloc(sizeof(SNode));
if (!p)
return ERROR;
p->data = e;
p->next = *S;
*S = p;
return OK;
}
Status Pop(Stack *S, ElemType *e)
{
if (IsEmpty(*S))
return ERROR;
SNode *p = *S;
*e = p->data;
*S = p->next;
free(p);
return OK;
}
Status GetTop(Stack S, ElemType *e)
{
if (IsEmpty(S))
return ERROR;
*e = S->data;
return OK;
}