函数指针等于函数内的另一个指针,为什么需要添加*

时间:2017-03-29 11:12:53

标签: c pointers malloc

请看看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);
    }
} 

3 个答案:

答案 0 :(得分:0)

因为它是一个指针。这只是c / c ++中的语法。

如果您使用的是没有*的指针,则表示您需要内存地址。当您使用*时,您需要该地址上的内容。

答案 1 :(得分:0)

如果你只看一下作业上面的一行,就说

Node *p = ...;

所以*pNode。声明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指向的内存地址中的数据。