首页 > 其他分享 >精通c语言中的指针(精通c指针1)

精通c语言中的指针(精通c指针1)

时间:2023-06-21 10:36:59浏览次数:37  
标签:精通 short 语言 int char 序号 类型 指针

之前学c语言的时候,指针这一章学的半吊子,似是而非,最近经过学习,对指针有个更加深刻的理解。

如果之前学过c指针,并且可以使用指针随心所欲操作内存中的任何数据,那么说明指针学好了,否则就是半吊子。

如果之前学过指针,那最好忘记之前学过的所有概念,把指针当做一种新的类型来学习。这种新的类型特点就是带*号。

  现在学习一种新的类型:

    1)这种类型就是在之前学过的所有类型后边加*号(注意,可以加多个*号),

      之前学过char、short、int、long、int arr[4]、struct等基本类型,现在在这些类型后边加*号,char*、short*、int*、long*、int* arr[4]、struct*、char****、short**;

                     写这种类型以这样的写法int*    a,short*********    b,这样方便理解;不要写成int   *a,short       ********* b,这样不好理解。

    2)这种带*号的新类型,有什么特点呢?

    每学习一个新的类型,都要对这种类型做探测,探测这种类型的几种属性:宽度、赋值方式、++、--、加减一个整数N、乘除、两个带*的相减、两个带*的比较

    char*  a ;int*  b;   int**********   c;

      3)宽度探测:  printf("%d",sizeof(a));printf("%d",sizeof(b));printf("%d",sizeof(c));最终会发现都是4(字节)

               总结:所有带*号的,不管带多少个*号,只要带*号,这种新的类型宽度都是4字节。

     4)赋值探测: int a=4的完整写法应该是int a=(int)4;一般为了省事,我们都是简写int a=4;

                                 short* a=4;通过编译器报错提醒,我们发现这种*号的类型赋值的时候不能简写,得使用完整赋值写法,我们知道怎样给带*号的类型赋值。

          short* a=4;char**** c=(char****)4;

                5)++、--探测:定义一个short* a=( short*)4;char**** d=(char****)5;

                                    a++相当于a=a+1;printf("%a",a);会发现打印的是6;

          d++相当于d=d+1;printf("%d",d);会发现打印的是9;

                                   a打印6是因为a+1=a+1×2=4+2=6;

                                   d打印9是因为d+1=5+1×4=9;

                                 总结:所有带*号的,不管带多少个*号类型加减N(例如:c+N),等于c的值加上N乘以(去掉1个*号的类型宽度),即c+N×(去掉一个*号的c的类型宽度)

                                           以后不管带多少个*,那么加减法我们都会做了。

            6) 乘除探测:不能做乘除。

           7)两个带*的比较探测:可以比较。

           8)并不是所有的变量前边都可以加*,只有之前这个变量被定义为带*的类型,这个变量前边才能加*,才可以在程序中出现“*变量”的格式。但是任何变量前边都可以加&。

           9)变量前边加*,得到的类型,原来定义类型减掉1个*。

           10)*号在反汇编代码是什么样的,例如*p,是两句反汇编代码,就是把p的值当做地址序号,取出这个序号指向的内存地址中的值。

                  int*     p;

                p在堆栈中是[ebp-4]的位置

                &p 是ebp-4

                   *p

                    mov eax,[ebp-4]          在堆栈中取出p的值

                    mov edx,  [eax]             再把p当做序号,取出序号里面存的值。

                     **p

                   mov eax,[ebp-4]               在堆栈中取出p的值

                   mov edx,  [eax]                  取出序号里面存的值,然后这个值变成一个内存序号

                   mov eax,   [edx]                 取出内存序号里面存的值。

标签:精通,short,语言,int,char,序号,类型,指针
From: https://www.cnblogs.com/gusseMe/p/17495495.html

相关文章

  • 全面解读Objective-C语言及Cocoa特性——《Objective-C基础教程》
    媒体评论“这是我读过的最好的一本编程书。我从头到尾逐字逐句地读完了它,可读性真强啊!试问,现在有几本技术书能达到这种程度?”——Amazon读者评论“这本书结构清晰,逻辑性强,风格幽默……借助本书,你可以毫不费力地从一个初学者摇身一变升级为优秀的Objective-C编程人员。”——Ama......
  • Rust语言 - 接口设计的建议之受约束(Constrained)
    Rust语言-接口设计的建议之受约束(Constrained)RustAPI指南GitHub:https://github.com/rust-lang/api-guidelinesRustAPI指南中文:https://rust-chinese-translation.github.io/api-guidelines/RustAPI指南:https://rust-lang.github.io/api-guidelines/受约束(Constrai......
  • 权威解答495个最常遇到的C语言问题
     该书上市后好评如潮,第一次印刷不到1个月就全部售罄。更多C语言经典图书推荐:《编程精粹:编写高质量C语言代码》     媒体评论:“本书是Summit以及CFAQ在线列表的许多参与者多年心血的结晶,是C语言界最为珍贵的财富之一。我向所有C语言程序员推荐本书。”          ......
  • 自然语言处理 Paddle NLP - 情感分析技术及应用-理论
    自然语言处理PaddleNLP-信息抽取技术及应用定义:对带有感情色彩的主观性文本进行分析、处理、归纳和推理的过程主观性文本分析:技术难点背景知识电视机的声音小(消极)电冰箱的声音小(积极)反讽/隐晦情感表达:我觉得你的香水不错,你应该关起窗户省着点闻(消极)网......
  • C++ 智能指针
    unique_ptrunique_ptr为了避免重复释放(doublefree)问题出现,进行拷贝(删除了拷贝构造函数)这样的特性带来的问题是无法进行参数传递(因为参数传递需要拷贝构造函数),有两种解决方法想要解决这个问题,首先需要理解为什么unique_ptr会禁止拷贝,对一个指针进行拷贝......
  • C语言-多文件项目
    简介 一个软件项目往往包含多个源码文件,编译时需要将这些文件一起编译,生成一个可执行文件。假定一个项目有两个源码文件foo.c和bar.c,其中foo.c是主文件,bar.c是库文件。所谓“主文件”,就是包含了main()函数的项目入口文件,里面会引用库文件定义的各种函数。//Filefoo.c#include<......
  • C语言-指针进阶详解(万字解析)
    前言本篇内容主要针对指针的进阶详解,如果不懂指针的含义要自行去看书看视频了解一下。指针指针是个特殊的变量,其功能就是来存放地址,地址唯一标识一块内存空间。指针的大小有两种一种是32位操作系统下的4个字节,一种是64位操作系统的8个字节。同时指针是有类型的,不同的类型决定了指针......
  • 欧姆龙OMRON PLC程序,威纶触摸屏螺丝机 配方程序。 用ST语言编
    欧姆龙OMRONPLC程序,威纶触摸屏螺丝机配方程序。用ST语言编写程序+威纶触摸屏程序。触摸屏带催款功能,转给学习自动化控制的盆友参考运用。实用于CJ2M,CP1HPLCID:7929609799920477......
  • 多路Qt串口通信源码C++语言接口自定义协议帧Qt读写配置文件ini出售: 可变长定长通信接
    多路Qt串口通信源码C++语言接口自定义协议帧Qt读写配置文件ini出售:可变长定长通信接口协议实现Qt多路串口发送接收SerialProtocol.rar工控自定义报文可用于嵌入式,单片机,ARM,DSP等常见的串口通信中,出售在应用实践中编写总结的源代码,实现自定义的串口通信协议,包括报文头部、长度......
  • R语言自适应LASSO 多项式回归、二元逻辑回归和岭回归应用分析|附代码数据
    值网格上计算套索LASSO或弹性网路惩罚的正则化路径正则化(regularization)该算法速度快,可以利用输入矩阵x中的稀疏性,拟合线性、logistic和多项式、poisson和Cox回归模型。可以通过拟合模型进行各种预测。它还可以拟合多元线性回归。”例子加载数据这里加载了一个高斯(连续Y)......