C:链接列表中这两个声明之间的区别
Posted
技术标签:
【中文标题】C:链接列表中这两个声明之间的区别【英文标题】:C : Difference between these two declaration in link list 【发布时间】:2021-09-10 00:11:17 【问题描述】:main() 中的代码有两种类型的声明。第一个有效,第二个无效。
第一个代码工作并打印输出如下:
设置占空比 0 设置频率 1 设置矿石 2 设置 Minuti 3
第二种情况只返回这个字符串,即它总是打印'Set Duty Cycle':
设置占空比 0 设置占空比 0
代码完成:
#include <stdio.h>
#include <stdlib.h>
const char text[][16] = "Set Duty Cycle",
"Set Frequency",
"Set Ore",
"Set Minuti",
"Set Current"
;
//char lcd is an index. When you get the next node, it read 'lcd' and print the new string
typedef struct node
char lcd;
unsigned int value;
struct node *next;
struct node *prev;
NODE;
void cursor(NODE **node)
printf(" %s %d",text[(*node)->lcd],(*node)->lcd);
(*node) = (*node)->next;
int main()
/* First case : it works as aspected
NODE **ptr;
NODE* head = &(NODE) .lcd = 0, .next = NULL, .prev = NULL, .value = 0 ;
NODE* setDutyC = &(NODE) .lcd = 1, .next = NULL, .prev = NULL, .value = 0 ;
NODE *setFreq = &(NODE) .lcd = 2, .next = NULL, .prev = NULL, .value = 0 ;
NODE *setOre = &(NODE) .lcd = 3, .next = NULL, .prev = NULL, .value = 0 ;
NODE *setMin = &(NODE) .lcd = 4, .next = NULL, .prev = NULL, .value = 0 ;
NODE *setCurr = &(NODE) .lcd = 5, .next = NULL, .prev = NULL, .value = 0 ;
setDutyC->next = setFreq;
setFreq->prev = NULL;
setFreq->next = setOre;
setFreq->prev = setDutyC;
setOre->next = setMin;
setOre->prev = setFreq;
setMin->next = setCurr;
setMin->prev = setOre;
head->next = setDutyC;
*/
//-------- second case : it prints only "Set Duty Cycle" string
NODE **ptr;
NODE *head;
NODE *setDutyC;
NODE *setFreq;
NODE *setOre;
NODE *setMin;
NODE *setCurr;
head = &(NODE) .lcd = 0, .next = setDutyC,.prev = NULL, .value = 0 ;
setDutyC = &(NODE) .lcd = 1, .next = setFreq, .prev = NULL, .value = 0 ;
setFreq = &(NODE) .lcd = 2, .next = setOre, .prev = setDutyC,.value = 0 ;
setOre = &(NODE) .lcd = 3, .next = setMin, .prev = setFreq, .value = 0 ;
setMin = &(NODE) .lcd = 4, .next = setCurr, .prev = setOre, .value = 0 ;
setCurr = &(NODE) .lcd = 5, .next = NULL, .prev = setMin, .value = 0 ;
//--------
ptr= &head;
cursor(ptr);
cursor(ptr);
cursor(ptr);
cursor(ptr);
就像“node->next”不起作用
【问题讨论】:
【参考方案1】: head = &(NODE) .lcd = 0, .next = setDutyC,.prev = NULL, .value = 0 ;
setDutyC = &(NODE) .lcd = 1, .next = setFreq, .prev = NULL, .value = 0 ;
在上面的第一行中,您使用了尚未初始化的setDutyC
。 setFreq
、setOre
、setMin
和 setCurr
的问题相同。这是错误的,会触发未定义的行为。
如果您打开编译器警告生成,您将收到一条警告消息。 始终解决所有警告。
【讨论】:
以上是关于C:链接列表中这两个声明之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
控制台 (/SUBSYSTEM:CONSOLE) 和 Windows (/SUBSYSTEM:WINDOWS) 之间的区别