GDB 点运算符引用指针?
GDB Dot Operator Dreferencing Pointer?
在用GDB调试时,我发现了一些很奇怪的东西。即,.运算符在 print 语句中使用时,可以像 -> 运算符一样取消引用单个甚至 double 指针以获取结构的字段。
这是一个简单的例子:
#include <stdio.h>
typedef struct node {
struct node *next;
int data;
} Node;
int main()
{
Node head, *head_p, **head_pp;
head.next = 0UL;
head.data = 42;
head_p = &head;
head_pp = &head_p;
// **GDB PAUSED HERE**
printf("head.data: %d\n", head.data);
// These won't compile because the . operator is misused
//
// printf("head_p.data: %d\n", head_p.data);
// printf("head_pp.data: %d\n", head_pp.data);
}
这是 GDB 在 printf
处暂停时的打印:
怎么可能。运算符(在 GDB 打印语句中)取消引用这样的指针??
谢谢!
GDB 命令的语法不是 C。表达式是根据模块的语言计算的,在您的情况下 C/C++。
., ->
Structure member, and pointer-to-structure member. For convenience, GDB regards the two as equivalent, choosing whether to dereference a pointer based on the stored type information. Defined on struct and union data.
在用GDB调试时,我发现了一些很奇怪的东西。即,.运算符在 print 语句中使用时,可以像 -> 运算符一样取消引用单个甚至 double 指针以获取结构的字段。
这是一个简单的例子:
#include <stdio.h>
typedef struct node {
struct node *next;
int data;
} Node;
int main()
{
Node head, *head_p, **head_pp;
head.next = 0UL;
head.data = 42;
head_p = &head;
head_pp = &head_p;
// **GDB PAUSED HERE**
printf("head.data: %d\n", head.data);
// These won't compile because the . operator is misused
//
// printf("head_p.data: %d\n", head_p.data);
// printf("head_pp.data: %d\n", head_pp.data);
}
这是 GDB 在 printf
处暂停时的打印:
怎么可能。运算符(在 GDB 打印语句中)取消引用这样的指针??
谢谢!
GDB 命令的语法不是 C。表达式是根据模块的语言计算的,在您的情况下 C/C++。
., ->
Structure member, and pointer-to-structure member. For convenience, GDB regards the two as equivalent, choosing whether to dereference a pointer based on the stored type information. Defined on struct and union data.