预增量运算符导致输出与 C 代码中的 post 增量运算符不同
Preincrement operator resulting in different output than post increment operator in C code
在下面的代码片段中,main
函数中使用的预递增运算符导致值从 2 开始,而 post 插入到列表时递增值从 1 开始。我想不通为什么。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
void insert_node(int new_data, Node **head_ref) {
Node *node= (Node *)malloc(sizeof (Node));
node->data = new_data;
node->next = *head_ref;
*head_ref = node;
}
void display(Node *head) {
Node *traverse = head;
while (traverse->next != NULL) {
printf("\ndata=%d", traverse->data);
traverse = traverse->next;
}
}
void main() {
Node *pdata;
Node *list_head = NULL;
int i = 0;
while (i <= 10)
insert_node(++i, &list_head);
display(list_head);
}
首先,您需要了解 pre and post increment 的工作原理。
Pre-Increment: 在表达式中使用变量之前增加变量的值。
示例:
int i = 0;
// first increment value of i by 1 and then print it
print("%d", ++i); // output: 1
print("%d", i); // output: 1
Post-Increment: 表达式执行完毕后变量值自增,其中post-increment被使用了。
示例:
int i = 0;
// first use the value of i in print() and after executing
// the print(), increment value of i
print("%d", i++); // output: 0
print("%d", i); // output: 1
现在就看你要用哪一个了。
其次,据我了解此函数存在逻辑错误
void display(Node* head)
{
Node* traverse = head;
while (traverse->next != NULL)
{
printf("\ndata=%d", traverse->data);
traverse = traverse->next;
}
}
while循环条件应该是
while (traverse != NULL)
我希望,它会回答你的问题。
在下面的代码片段中,main
函数中使用的预递增运算符导致值从 2 开始,而 post 插入到列表时递增值从 1 开始。我想不通为什么。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
void insert_node(int new_data, Node **head_ref) {
Node *node= (Node *)malloc(sizeof (Node));
node->data = new_data;
node->next = *head_ref;
*head_ref = node;
}
void display(Node *head) {
Node *traverse = head;
while (traverse->next != NULL) {
printf("\ndata=%d", traverse->data);
traverse = traverse->next;
}
}
void main() {
Node *pdata;
Node *list_head = NULL;
int i = 0;
while (i <= 10)
insert_node(++i, &list_head);
display(list_head);
}
首先,您需要了解 pre and post increment 的工作原理。
Pre-Increment: 在表达式中使用变量之前增加变量的值。
示例:
int i = 0;
// first increment value of i by 1 and then print it
print("%d", ++i); // output: 1
print("%d", i); // output: 1
Post-Increment: 表达式执行完毕后变量值自增,其中post-increment被使用了。
示例:
int i = 0;
// first use the value of i in print() and after executing
// the print(), increment value of i
print("%d", i++); // output: 0
print("%d", i); // output: 1
现在就看你要用哪一个了。
其次,据我了解此函数存在逻辑错误
void display(Node* head)
{
Node* traverse = head;
while (traverse->next != NULL)
{
printf("\ndata=%d", traverse->data);
traverse = traverse->next;
}
}
while循环条件应该是
while (traverse != NULL)
我希望,它会回答你的问题。