【发布时间】:2017-11-10 05:52:29
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int val;
struct node* next;
} Node, *NodePtr;
void makeInitialLinkedList(int a[], int n)
{
int i;
NodePtr rec=NULL;
NodePtr head=NULL;
for (i=0; i<n; i++) {
NodePtr cur=(NodePtr)malloc(sizeof(Node));
if (i==0) head=cur;
if (rec!=NULL) rec->next=(node*)cur;
cur->val=a[i];
cur->next=NULL;
rec=cur;
}
// test
while(n--) {
printf("%d ", head->val);
head=(NodePtr)head->next;
}
}
NodePtr copy(NodePtr head)
{
return NULL;
}
int main()
{
//Mission #2
int initialDataArray[10]={5,3,2,8,9,7,0,6,4,1};
makeInitialLinkedList(initialDataArray, 10);
}
我不明白为什么会这样。我最初没有为结构命名,只通过 typedef 命名了姓氏“Node”。那么“struct node* next”是如何正常工作的呢? node* 是一种像 int* 或 char* 这样的数据类型吗?我是这样想的:
typedef struct strName {
int val;
struct strName* next;
} strSurName, *strPtr;
指针“next”的类型和struct的初始名称是否必须相同?
【问题讨论】:
-
总的来说,我相信拥有相同的类型是好的,但这取决于你。它也可以是
void *类型 -
不要为了获得语法糖而将指针语义隐藏在 typedef 后面。
-
typedef指针不是一个好习惯;这可能会导致错误和混乱。 -
我知道这不好,但我的愚蠢教授坚持这样......哈哈
-
“我不明白为什么会这样。” - 你发布的代码确实不编译 - 因为
node没有像你想象的那样定义
标签: c pointers struct linked-list typedef