请看看Node * newNode(),我不明白为什么我必须为p = x添加* 我创建了一个名为x的节点(带有data& next),并使用malloc创建了一个新的内存空间* p, 然后让p = x,但是我必须为p = x?
添加*#include<stdio.h>
#include<stdlib.h>
struct Node{
int data;
Node *next;
};
Node *newNode(int data, Node *next){
Node x = {data, next};
Node *p = (Node *)malloc(sizeof(Node));
*p = x; //i dont understand why an * need to be added here
return p;
}
showNode(const struct Node *p){
printf("%d\n", p->data);
}
int main(){
Node *pHead = NULL;
for(int i=4; i>=0; i--) {
pHead = newNode(i,pHead);
}
printf("%d\n", pHead->next->next->next->data);
Node* p = pHead;
while(p != NULL){
showNode(p);
p = p-> next;
}
p = pHead;
while(p != NULL){
Node *pTemp = p;
p = p->next;
free(pTemp);
}
}
答案 0 :(得分:0)
因为它是一个指针。这只是c / c ++中的语法。
如果您使用的是没有*的指针,则表示您需要内存地址。当您使用*时,您需要该地址上的内容。
答案 1 :(得分:0)
如果你只看一下作业上面的一行,就说
Node *p = ...;
所以*p
是Node
。声明x
Node x = ...;
也是如此
如果您想将一个Node
分配给另一个x
,请使用其名称*p
和 uri = URI.parse('http://localhost/test')
http = Net::HTTP.new(uri.host, uri.port)
attribute_url = '?'
attribute_url << body.map{|k,v| "#{k}=#{v}"}.join('&')
request = Net::HTTP::Delete.new(uri.request_uri+attribute_url)
response = http.request(request)
。
答案 2 :(得分:0)
* p有两个含义。 1)在时间声明...就像你写int * p。这意味着你已经声明了一个指向整数的指针。 2)不在声明时。 * p现在只是表示存储在p指向的内存地址中的数据。