首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中" *“、”*“和”*“指针的区别

C中" *“、”*“和”*“指针的区别
EN

Stack Overflow用户
提问于 2015-05-22 15:47:17
回答 4查看 139关注 0票数 0

我正在学习从极客到极客的图形(邻接列表),我看到了以下代码:

代码语言:javascript
复制
// 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;

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-22 15:58:47

正如其他人已经说过的,这是一回事,但是,看看下面的例子:

代码语言:javascript
复制
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*(又名指针)--换句话说,*只与第一个变量相关,这意味着bint类型的

票数 1
EN

Stack Overflow用户

发布于 2015-05-22 15:48:58

它们是相同的,只有不同的写作风格“指向结构AdjListNode的指针”。

票数 4
EN

Stack Overflow用户

发布于 2015-05-22 16:03:45

这个问题的答案是他们是一样的。即使它们都是一样的,为什么它们实际上是一样的,这是相当有趣的。

因为根据C标准6.4.6标点符号,字符"*“是标点符号。因此,它不能是名称类型的一部分。

正如您在6.4.6.2中所读到的,标点符号是一个具有独立句法和语义意义的符号。

这就是为什么它与普通字符不同的原因,普通字符使类型名,因此被解释为指针。因为它不可能是名称的一部分,所以编译器总是假设当它看到"*“时,您就结束了类型的名称,因为在空格第一次出现的情况下,空格就被忽略了。

第5.1.1.2节标准的翻译阶段描述了编译器是如何对待空格的.(事实上,在令牌化之后,它们就不再重要了)。

我想也许值得补充一下。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30400926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档