【发布时间】:2016-06-29 05:12:55
【问题描述】:
考虑:
#include<stdlib.h>
#include<stdio.h>
struct node {
int val;
struct node *next;
};
typedef struct node item;
void main() {
item * curr, *head;
int i;
head = NULL;
for (i = 1; i <= 10; i++) {
curr = (item *)malloc(sizeof(item));
curr->val = i;
curr->next = head;
head = curr;
}
curr = head;
while (curr) {
printf("%d\n", curr->val);
printf("%d\n", *curr);
curr = curr->next;
}
getchar();
}
当我打印出来时,*curr 和 curr->val 是相同的。为什么?
我对@987654325@ 感到困惑。我认为*curr 是&curr 指向的值。 (我是 C 的新手。)
【问题讨论】:
-
如果您在编译时出现警告,请使用 "printf("%d\n", *curr);" 行应该打印一个警告,因为 struct node 不是整数。虽然您看到这种行为是有原因的,但它有点复杂,并且与 C 中如何处理可变参数有关。可能您应该避免这样做,以便更容易理解这种行为。
-
printf("%d\n", *curr);是未定义的行为,因为*curr不是 int。 -
除了上述cmets正确指出的内容外,供参考,使用
(*curr).val访问元素与curr->val相同 -
warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘item’ [-Wformat=] printf("%d\n", *curr);
标签: c pointers linked-list