C中的指针及其作为数组的解释

时间:2014-08-11 04:46:27

标签: c pointers

我正在尝试在邻接列表表示中保存图形,因此,我正在使用指针来实现此目的。编写整个代码片段并不富有成效,因此我正在编写该部分的代码片段,但我没有实现。

为了澄清,我使用current以便能够在最后附加一个节点,而且我不需要遍历整个列表。< / em>的

我不确定这种分配指针的方式是否正确。任何微妙的暗示都会有很大的帮助。 非常感谢!!

int n;

struct node{
    int i;
    struct node * next;
};

int main(){
    printf("Enter nodes");
    scanf("%d",&n);

    struct node *adjlist=(struct node*)calloc(n,sizeof(struct node));
    struct node *current=(struct node*)calloc(n,sizeof(struct node));

    struct node *temp=(struct node*)calloc(1,sizeof(struct node));
    temp->i=10;
    temp->next=0;

    /* PROBLEM IS HERE
    What I want to do is :
    (adjlist+n-2)=temp;
    But it reflects the following error :
    lvalue required as left operand of assignment       
    Hence, using the BELOW statement.*/

    adjlist[n-2]=*temp;
    current[n-2]=*temp;

    temp=(struct node*)calloc(1,sizeof(struct node));
    temp->i=20;
    temp->next=0;

    /* The same I want to implement here as well.*/
    current[n-2].next=temp;
    current[n-2]=*temp;

    return 0;
}

更新
我正在尝试打印与地址(adjlist+n-2)对应的链接列表,即应打印值 10 20 。但只有第一个值( 10 )才会被打印出来。我正在使用的打印功能是:

void printlist(struct node * adjlist){
struct node *list=adjlist+n-2;
while((*list).next!=NULL){
printf ("\t%d",list->i);
list=list->next;}
printf ("\t%d",list->i);
}

我的打印功能是否会造成错误,或错误位于其他地方?

2 个答案:

答案 0 :(得分:1)

(adjlist+n-2)是一个常量表达式。您不能在赋值语句的左侧使用它。我认为你的意图是*(adjlist+n-2)

答案 1 :(得分:0)

Copying structure in C with assignment instead of memcpy()

作为一方,你需要在第二次分配内存之前释放温度,否则你会泄漏内存。