Я относительно новичок в 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;
}