结构体访问成员变量什么时候该用“->”或者是"."呢?的困惑

煎蛋栗子:

typedef struct Node{
int data;
struct Node *next;
}LinkList;

LinkList *p=(LinkList *)malloc(sizeof(LinkList));

在这里,变量p是【LinkList *】类型的【指针变量】
它的值是指向某一个【结点】的【地址】

而【(*p)】表示的则是【结点变量】,它的值指向的是一个【结点】
p是指针,(*p)是结点变量。
我们要访问结构体内的成员data

通过指针变量访问:【p】->data
通过结点变量访问:【(*p)】.data

如果你不厌其烦地写【p.data】

系统也会不厌其烦地给你提示error: request for member ‘next‘ in ‘p‘, which is of pointer type ‘LinkList* {aka node*}‘ (maybe you meant to use ‘->‘ ?)

时间: 2024-08-30 09:57:53

结构体访问成员变量什么时候该用“->”或者是"."呢?的困惑的相关文章

计算结构体中成员变量的偏移

被人问到这个问题,各种解决. google一下,MFC中有一个OFFSET宏,就有这个功能. 写一下: #define offsetof(structure, member) ((int)(&((structure *)0)->member)) eg: #include <iostream> using namespace std; #include <stdio.h> #define offsetof(structure, member) ((int)(&(

&lt;02&gt;【掌握】01-类的声明和实现+【掌握】13-创建一个对象并访问成员变量+【掌握】14-无参方法声明实现及调用+【掌握】15-有参方法声明实现及调用+

[掌握]01-类的声明和实现 类: 一类事物共同特征和行为的抽象 大卡车 小轿车 挖掘机 车类: Car 共同的特征(属性): 颜色 速度 轮子 共同的行为: 跑 停止 对象: 类的具体的个体 东风21D(车类的对象) 解放大卡车(车类的对象) BYD (车的对象) 时风 (车的对象) 2.类的定义 结构体定义 struct Student{ }; ---->定义一个Student 结构体 类的定义分为两部分: 1)类的声明(规定当前类的:类名.属性.行为) @interface 类名:父类名

遍历结构体中的变量

public struct Site  {  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]  public string Country;     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]  public string StationNumber;     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]  publi

计算一个结构体student_type的变量

for(i=0;i<SIZE;i++)    scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age, stud[i].addr):    save():    printf("**********************************\n"):    printf("这是刚才写到文件里的内容\n"):    output():    return 0;   

OpenCV 中结构体IplImage 成员width widthStep使用注意事项

OpenCV 中结构体IplImage 成员width,widthStep使用注意事项 width 是指的图片宽度是多少个像素,而这里widthStep是指的图片中的每一行占用多少个字节. 而且,widthStep会有字节对齐. 当需要对每个像素进行操作的时候,这里最好用widthStep做行递增变换. 比方说这里就是一个例子,明显,ptr_pixel_tmp是指向double类型的三通道图像,而ptr_pixel_img是unsigned char类型的三通道图像,double占八个字节. 于

java 继承访问成员变量

package java09; //创建父类 public class Fu { int numFu = 10; int num =100; public void methodFu(){ System.out.println(num); } } package java09; //创建子类 public class Zi extends Fu { int numZi = 20; int num =200; public void methodZi(){ System.out.println(n

结构体2之变量赋值于字符串

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct dangdang 5 { 6 char email[30]; 7 char name[30]; 8 char addr[100]; 9 int num; 10 int bugnum; 11 char tel[20]; 12 char phone[20]; 13 double RMB; 14 int dangdang;//成员名可以和类名同名 15 }dx,dy= { 16 &

结构体全局变量成员赋值

struct s { int a; }; s g; g.a = 1; // 编译错误 void f() { g.a = 1; // 编译正确 } 为什么全局结构体变量成员只能在函数内调用? 因为g.a=1是赋值语句,不是初始化语句,赋值语句只能运行的时候可以执行.

通过结构体某个成员的地址计算结构体首地址

给出一个结构体成员的地址计算该结构体的起始地址,据说内核代码中有这样用的,但还没有看到.不过觉得这个题的解决方法还是有一定技巧的,就总结一下.下面是实现的代码. /* Author: Godbach Date: Oct 23, 2008 */ #include <stdio.h> #define STRUCT_OFFSET(stru_name, element) (unsigned long)&((struct stru_name*)0)->element struct stru