gpt4 book ai didi

c - 为什么这些代码片段的行为不同?

转载 作者:行者123 更新时间:2023-11-30 20:08:45 25 4
gpt4 key购买 nike

我对 C 语言比较陌生,一直在学习带有指针的链表。

我了解到(*foo).bar 是同一个广告 foo->bar。使用 foo->bar 是因为它更具可读性。

因此我不明白为什么这些代码片段的行为不同:

1)

void appendCourse(CourseNode** pLL, Course c){
CourseNode * root = *pLL;

CourseNode* last = makeCourseNode(c);

if(root != NULL){
CourseNode node = *root;

while(node.pNext != NULL){
node = *node.pNext;
}

node.pNext = last;
} else {
*pLL = last;
}
}

2)

void appendCourse(CourseNode** pLL, Course c){
CourseNode * root = *pLL;

CourseNode* last = makeCourseNode(c);

if(root != NULL){
CourseNode *node = root;

while(node->pNext != NULL){
node = node->pNext;
}

node->pNext = last;
} else {
*pLL = last;
}
}

对我来说,1) 的行为应该像首先取消引用,然后是成员访问。有点像 (*foo).bar

但是1)似乎根本不起作用,它只能成功添加第一个元素。

2) 但是,会将所有元素添加到链接列表中。

如果这有帮助:我的结构和其他方法:

typedef struct CourseNode {
struct CourseNode* pNext;
Course course;
} CourseNode;

typedef struct
{
StudentNode *pWaitlistHead; // Waitlist for this course
char szCourseId[12]; // Course Identifier
char szRoom[15]; // Room number of the course
char szDays[15]; // What days the course will meet, ex: MWF, TR, etc
char szTimes[15]; // Meeting Time, ex: 10:00-11:15am
int iAvailSeats; // Number of available seats in the course
double dFee; // Additional fees for the course
} Course;


CourseNode* makeCourseNode(Course c){
CourseNode * node = malloc(sizeof(CourseNode));
node->pNext = NULL;
node->course = c;
return node;
}

最佳答案

    CourseNode node = *root;

while(node.pNext != NULL){
node = *node.pNext;
}

这将创建一个名为 node 的新 CourseNode。新的 CourseNode 的值被修改,但这对链表没有影响。

    CourseNode *node = root;

while(node->pNext != NULL){
node = node->pNext;
}

这里,node指向链表上的CourseNode

理解差异的最简单方法是第一个代码摘录创建新的 CourseNode。这就像这两者之间的区别:

int foo (int *i)
{
int *j = i; // j is a pointer to the same int i points to
*j = 2; // this changes the value of the int i points to

int j = *i; // this creates a new int
j = 2; // this changes the value of that new int
}

关于c - 为什么这些代码片段的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55465885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com