首页 > 其他分享 >C语言中.与->的区别

C语言中.与->的区别

时间:2023-05-11 11:15:04浏览次数:31  
标签:指向 区别 int C语言 运算符 stu phead 结构

(一)基础

结构体,结构体指针箭头

a->b 的含义是 (*a).b 。  现代的标准化的 C 语义上来说, -> 可以用 * 和 . 的组合实现。

简单的说,就是一个快捷方式,一个语法糖。

(二)例子

在机器码和汇编的角度来看,不存在变量,不存在 struct 这种东西,只存在寄存器和一个叫做内存的大数组。

结构体变量用 . 来访问结构体的成员如下:

#include<stdio.h>
#include <malloc.h>
struct stu{
    int  age;
    stu* next;
};
int main(){
    stu s1;
    s1.age =18;
    
    return 0;
}

指向结构体的指针->来访问其指向的结构体的成员如:

#include<stdio.h>
#include <malloc.h>
struct stu{
    int  age;
    stu* next;
};
int main(){
    stu *phead = (stu*)malloc(sizeof(stu));//测试代码 
    phead->age=18;
    phead->next = NULL;
    stu* p = phead;
    
    return 0;
}

(三)总结

  1. A->a表示A是指向结构体的指针
  2. A.a表示A是结构体
  3. A->a等效于(*A).a
  4. A.B则A为对象或者结构体;
  5. A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;
  6. (*a).b 等价于 a->b。"."一般情况下读作"的”; “->”一般读作"指向的结构体的"。也就是说在结构中,运算符->是运算符*和运算符.的结合
  7. “->”是指向结构体成员运算符。“.”是断点符号,不属于运算符。
  8. “->”所指向的是结构体或对象的首地址。“.”所指向的是结构体或对象。
  9. “->”的用处是使用一个指向以便访问结构体或对象其内成员。“.”的用处是使用一个指向以便访问结构体或对象。

 

标签:指向,区别,int,C语言,运算符,stu,phead,结构
From: https://www.cnblogs.com/imreW/p/17390443.html

相关文章

  • location.href和location.replace的区别
    情景比如支付过程中或者使用商品的优惠券,而使用这张优惠券需要取请求一个第三方的地址,中间会有一次跳转。若使用window.location.href=“url”,按流程操作是没问题的,但是如果用户点击返回,则无法跳回原本的提交订单的页面,会一直进行重复请求,造成程序出错。所以,必须替换成wind......
  • 学校的数据结构实验_二叉树c语言实现
    二叉树的实现包括二叉树的构建,和二叉树的前中后序便利,二叉树的层序非递归遍历,求二叉树的总结点,求二叉树的最大深度和求二叉树的最大宽度,因为实验主要是对二叉树的各个属性数据测量,所以这里手动链接了一颗二叉树.随后用调用函数接口传参二叉树的根节点测量二叉树的属性.递......
  • 学校数据结构实验_线性表:纯C语言版
    首先分别声明链表和顺序表的结构单位,  1:插入实现:顺序表插入比较简单,直接访问下表找到插入位置,然后移动所有后面的数据将插入的位置空出来,然后将需要插入的数据插入,链表的插入:因为一般链表都是调用头插或者尾插,但是为了和顺序表相比较,再插入的时候增加了随机位置......
  • 互联网、因特网和万维网的区别
    互联网、因特网和万维网的区别互联网互联网的定义比较多样。目前最权威的定义是现行的通信名词术语标准(GB/T32402-2015【正版】通信名词术语数据通信因特网),里面对互联网的定义是“由多个计算机网络相互连接而成的网络,它是在功能和逻辑上组成的一个大型网络”。这和英文的inte......
  • 打卡 c语言趣味编程 抓交通肇事犯
    一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下车号的一些特征。 甲说:牌照的前两位数字是相同的; 乙说:牌照的后两位数字是相同的,但与前两位不同; 丙是数学家,他说:四位的车号刚好是一个整数的平方。 请根据以上线索求出车号。......
  • 接口继承和抽象类继承区别以及普通类和抽象类做基类的区别
    接口继承和抽象类继承区别C#中接口和抽象类都可以用于实现继承,但是它们有一些重要的区别。接口是一种行为规范,它只规定了类应该包括哪些方法,但是没有提供任何实现细节,因此实现接口的类必须提供所有规定的方法实现;抽象类是一种半成品类,它可以包含实现代码以及其他抽象方法,子类必......
  • JS中some和every的区别和用法
    some和every是数组中迭代的方法相同点:some和every都有三个参数,即item→当前项,index→当前的索引值,array→数组本身;都可以遍历数组不同点:some相当于逻辑关系中的或,只要有一个参数满足条件,则中断遍历,返回true,如果遍历完所有参数,没有找到符合的项,即返回false;every相当于关系中的且,......
  • count(*)、count(1)、count(列名)有什么区别
    转载:https://juejin.cn/post/6854573219089907720https://juejin.cn/post/7152086171244298254......
  • openai模型个性化训练Embedding和fine-tuning区别
    现在基于自然语言和文档进行对话的背后都是使用的基于嵌入的向量搜索。OpenAI在这方面做的很好,它的Cookbook(github.com/openai/openai-cookbook)上有很多案例,最近他们对文档做了一些更新。GPT擅长回答问题,但是只能回答它以前被训练过的问题,如果是没有训练过的数据,比如一些私有数据......
  • 常量指针和指针常量的区别
     定义变量inta=1;intb=2; 常量指针:顾名思义,指向常量的指针(apointertoconstint),不能通过该指针修改变量的值(不通过该指针仍然可以修改)constint*p1=&a; // *p1为const,即指针指向的值为const*p1+=1;  // 错误,试图通过p1修改a的值p1=&b;   ......