我正在学习从极客到极客的图形(邻接列表),我看到了以下代码:
// A structure to represent an adjacency list node
struct AdjListNode
{
int dest;
struct AdjListNode* next;
};
// A structure to represent an adjacency liat
struct AdjList
{
struct AdjListNode *head; // pointer to head node of list
};
// A structure to represent a graph. A graph is an array of adjacency lists.
// Size of array will be V (number of vertices in graph)
struct Graph
{
int V;
struct AdjList* array;
};我想知道以下几点的区别:
struct AdjListNode* next;、struct AdjListNode *head;和struct AdjListNode * head;
发布于 2015-05-22 15:58:47
正如其他人已经说过的,这是一回事,但是,看看下面的例子:
int main() {
int* a = NULL , b;
b = 5;
a = &b;
printf("a = %p, *a = %d, b = %d", a, *a, b);
return 0;
}输出:a = 000000000022FE44, *a = 5, b = 5在第一行int* a = 0 , b; only a是类型int*(又名指针)--换句话说,*只与第一个变量相关,这意味着b是int类型的
发布于 2015-05-22 15:48:58
它们是相同的,只有不同的写作风格“指向结构AdjListNode的指针”。
发布于 2015-05-22 16:03:45
这个问题的答案是他们是一样的。即使它们都是一样的,为什么它们实际上是一样的,这是相当有趣的。
因为根据C标准6.4.6标点符号,字符"*“是标点符号。因此,它不能是名称类型的一部分。
正如您在6.4.6.2中所读到的,标点符号是一个具有独立句法和语义意义的符号。
这就是为什么它与普通字符不同的原因,普通字符使类型名,因此被解释为指针。因为它不可能是名称的一部分,所以编译器总是假设当它看到"*“时,您就结束了类型的名称,因为在空格第一次出现的情况下,空格就被忽略了。
第5.1.1.2节标准的翻译阶段描述了编译器是如何对待空格的.(事实上,在令牌化之后,它们就不再重要了)。
我想也许值得补充一下。
https://stackoverflow.com/questions/30400926
复制相似问题