gpt4 book ai didi

c - 提供特定值但返回错误指针

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:47 25 4
gpt4 key购买 nike

我有一个包含不同等级单词的结构。例如,如果你得到了 A 级,那么描述你的词就是“Brilliant”、“Fantastic”。如果你得到了 B 级,那么形容你的词就是“好”、“不错”。这些词存储为结构。

但是,我需要创建一个函数 (grade_pnter_finder),我在其中解析成绩,如果是该成绩的头或尾,它会返回该成绩单词的结构。但是,无论成绩如何,它都会不断向我返回相同的指针。如果我给它尾部 A 级,它会返回指针 100。如果我给它尾部 B 级,它会返回指针 100。

#include <stdio.h>
#include <stdlib.h>

struct grade {
struct grade_word *A_head;
struct grade_word *A_tail;

struct grade_word *B_head;
struct grade_word *B_tail;

struct grade_word *C_head;
struct grade_word *C_tail;

struct grade_word *D_head;
struct grade_word *D_tail;

struct grade_word *E_head;
struct grade_word *E_tail;

};

struct grade_word {
char *word;
int word_len;
struct grade_word *next;
struct grade_word *prev;
};

struct grade *create_grade() {

struct grade *new_grade = malloc(sizeof(struct grade));

// Check grade was allocated correctly
if (new_grade == NULL) {
fprintf(stderr, "ERROR: Could not allocate memory for grade\n");
exit(1);
}

// Initialise all variables
new_grade->A_head = NULL;
new_grade->A_tail = NULL;
new_grade->B_head = NULL;
new_grade->B_tail = NULL;
new_grade->B_head = NULL;
new_grade->C_tail = NULL;
new_grade->C_head = NULL;
new_grade->C_tail = NULL;
new_grade->D_head = NULL;
new_grade->D_tail = NULL;
new_grade->E_head = NULL;
new_grade->E_tail = NULL;

return new_grade;
}

struct grade_word *grade_pnter_finder(struct grade *grade_data, char grade,
char h_or_t) {

struct grade_word *target = NULL;
if (grade == 'A') {
if (h_or_t == 'H') {
target = grade_data->A_head;
} else {
target = grade_data->A_tail;
}
} else if (grade == 'B') {
if (h_or_t == 'H') {
target = grade_data->B_head;
} else {
target = grade_data->B_tail;
}
} else if (grade == 'C') {
if (h_or_t == 'H') {
target = grade_data->C_head;
} else {
target = grade_data->C_tail;
}
} else if (grade == 'D') {
if (h_or_t == 'H') {
target = grade_data->D_head;
} else {
target = grade_data->D_tail;
}
} else {
if (h_or_t == 'H') {
target = grade_data->E_head;
} else {
target = grade_data->E_tail;
}
}

if (h_or_t == 'H') printf("Grade %c's Head pointer is at: %p\n", grade, &target);
else printf("Grade %c's Tail pointer is at: %p\n", grade, &target);
return target;
}

int main(void) {

struct grade *new_grade = create_grade();
struct grade_word *pnter;
pnter = grade_pnter_finder(new_grade, 'A', 'H');
pnter = grade_pnter_finder(new_grade, 'A', 'T');
pnter = grade_pnter_finder(new_grade, 'B', 'H');
pnter = grade_pnter_finder(new_grade, 'B', 'T');
pnter = grade_pnter_finder(new_grade, 'C', 'H');
pnter = grade_pnter_finder(new_grade, 'C', 'T');
pnter = grade_pnter_finder(new_grade, 'D', 'H');
pnter = grade_pnter_finder(new_grade, 'D', 'T');
pnter = grade_pnter_finder(new_grade, 'E', 'H');
pnter = grade_pnter_finder(new_grade, 'E', 'T');

printf("Stop compiler complaining for unused variable = %p\n", &pnter);


}

输出:

Grade A's Head pointer is at: 0028FEFC
Grade A's Tail pointer is at: 0028FEFC

Grade B's Head pointer is at: 0028FEFC
Grade B's Tail pointer is at: 0028FEFC

Grade C's Head pointer is at: 0028FEFC
Grade C's Tail pointer is at: 0028FEFC

Grade D's Head pointer is at: 0028FEFC
Grade D's Tail pointer is at: 0028FEFC

Grade E's Head pointer is at: 0028FEFC
Grade E's Tail pointer is at: 0028FEFC

Stop compiler complaining for unused variable = 0028FF28

如您所见,它们都指向同一个地方。不应该指向不同的地方吗?

最佳答案

如果您指的是打印的值:

if (h_or_t == 'H') printf("Grade %c's Head pointer is at: %p\n", grade, &target);
else printf("Grade %c's Tail pointer is at: %p\n", grade, &target);

您应该将&target 更改为target。你想打印局部变量的值,而不是它在内存中的存储位置。

关于c - 提供特定值但返回错误指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53347134/

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