【发布时间】:2017-03-23 21:52:25
【问题描述】:
我学习电子工程,并且正在学习 C 作为我的第一语言。我一直在学习 IIT C 编程课程,当涉及到指针时,我通常需要多一点时间来理解程序。
我现在正在学习链表,我会放一部分代码,然后告诉大家我遇到了什么问题。我不会把所有东西都放上去,因为我认为没有必要。
typedef struct node_type {
int data;
struct node_type *next;
} node;
typedef node_type *list;
list head, temp;
char ch;
int n;
head = NULL;
scanf("%c", &ch);
while (ch == 'Y' || ch == 'y') {
temp = (list)malloc(sizeof(node));
temp->data = n;
temp->next = head;
head = temp;
scanf("%c", &ch);
我不明白为什么在处理指向结构的指针时使用'->',我现在知道temp->data = n; 等同于(*temp).data = n;。但是我对第二个表达式的语法有疑问,为什么使用它可以访问“temp”指向的结构内的“数据”。
当声明变量时,这里有一个顺序:http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html
我知道运算符有优先顺序。在声明中,我将 * 读作“指向”。我应该如何阅读代码中间的(*temp).data(不是声明)?
在课程开始时,Dr.P.P.Chakraborty 说 * 可以理解为“the content of”,但在这个表达中就没有意义了:“the content of temp...”
- 在声明中不使用运算符 * 是什么意思?
-
typedef的使用遵循与int *a[]一样的声明规则?typedef int *a[]声明类型“a”是指向 int 的指针数组?
感谢任何帮助。
【问题讨论】:
-
听起来您有多个问题。你能用项目符号列表列出所有问题吗?
-
是的,也许它会在未来对某人有所帮助。现在我想我明白意思了,但我会调整我的问题。谢谢。
-
如果您使用的是 C 编译器而不是 C++ 编译器,并且没有其他头文件定义结构,那么
typedef node_type *list;将无法编译。你可以使用typedef struct node_type *list;(但you shouldn'ttypedefpointers),这样就可以编译了。 -
把
(*temp).data读成tyro的写法temp->data——对代码的轻微混淆。 -
typedef node_type *list;不要将指针隐藏在 typedef 后面。它会让你和其他人感到困惑。只是不要。