![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
小生不是书呆子
这个作者很懒,什么都没留下…
展开
-
指针星号*的理解
星号*的理解在C语言中, *的用途有两个,一个是用于表示乘号,第二个与指针有关。虽然这两种用途都会用到,但这两者没有任何关系。*在指针中的用途主要有两个方面,第一种是用在指针定义的时候,与前面的类型结合,用于表示被定义指针变量的类型, *的个数表明了定义的指针变量的级数,如下所示。int *p; int* p;*靠前靠后都没关系,这时的“与p是两个不同的东西,星号表明p是一个一级指针变量,用于存放一个一级地址。但是需要注意下面的情况。int *p1, *p2: // p1和p2都是in.原创 2020-12-23 14:15:59 · 13475 阅读 · 3 评论 -
指针使用之三部曲
定义(声明)int *p=NULL;//初始化一下,防止野指针关联int a= 10;p =&a;// a空间的首地址给了p,所以p里面的地址常量指向了a空间,因此简称p->a空间。引用读空间:读值操作,前提是里面存有数据才行。int b=*p; //等价于b = a;写空间:向空间写入新的值。*p =30;//等价于a=30;...原创 2020-12-23 14:09:13 · 145 阅读 · 0 评论 -
高级语言如Java,C#的指针到哪里去了
C++里面保留了指针的使用,初学Java,C#等高级语言的同学,都会因为里面没有指针而困惑,甚至在想,难道这些高级语言就不需要访问内存空间了吗?凡是遇到过Java异常处理的同学,都会发现Java中有一种空指针异常,大多是因为我们使用了没有实例化的对象名导致的,因为没有实例化就没有为对象分配内存空间。既然有空指针异常,就证明Java是使用了指针的,只是全部都由类的底层封装好了,不需要我们关心, 目的就是跳过指针这一难点,使得Java简单实用。但是由于不能直接操作指针,面对频繁使用指针的底层开发而言,.原创 2020-12-23 14:05:03 · 291 阅读 · 0 评论 -
为什么需要指针
不管多么"高大上”的程序,最终都是在硬件上运行的,所有对于硬件的设置和访问,全部都是通过对内存操作实现的。广义上的内存可以包括寄存器、缓存、常说的内存(内存条)等,这些内存空间都是由一个个的字节构成的,每个字节都有地址,对于这些空间的访问,大多都是通过地址实现的。只站在C语言自身的角度,也可以看到指针的好处。比如fun1函数有一个自动局部变量a,它的作用域被局限在fun1函数内部, fun2函数是无法访问的;如果fun2想要访问fun1中a的话,我们可以将a的地址传递给fun2函数,当然前提是fu.原创 2020-12-23 14:03:03 · 185 阅读 · 0 评论 -
程序运行的目的
我们知道,驱动程序的目的就是为了管理硬件,驱动程序管理硬件的媒介就是寄存器(一种特殊的内存) ,通过对寄存器这种特殊内存的读(取)写(存) ,从而实现对硬件的功能设置以及数据的存取。所有软件本质上都是基于这样的原理在硬件上运行的,从而达到了软件与硬件融为一体的目的。学习指针的过程: 佛家说, "参透前,看山是山,看水是水;参透时,看山不是山,看水不是水;参透后,看山还是山,看水还是水”。程序运行的目的就是处理数据。...原创 2020-12-23 13:58:39 · 511 阅读 · 0 评论 -
指针变量的类型作用
对于普通变量来说,其类型的作用主要有以下几个方面。程序员写代码时识别用:不涉及强制转换时,知道该变量中应该存放什么类型的数值。空间大小的说明:比如int为4个字节空间。存储结构说明: float和int虽然空间大小都是4个字节,但是其存储结构完全不同。对于指针变量来说,其类型的作用与上面基本一致,只是其类型是由普通类型+星号构成。星号的个数,表明了指针变量的级数,指针变量用来存放地址。当不涉及强制转换时,其对应关系如下。某类型一级指针变量=该类型一级地址某类型二级指针变量=&a.原创 2020-12-23 13:56:27 · 1372 阅读 · 2 评论 -
指针变量
指针变量广义上说,常说的“指针”隐含两个东西,一个是指针变量,另一个是指针常量。我们一般都是统称它们为指针,在大多数情况下,指针指的都是指针变量。如果指针用得很熟悉的话,没有必要对它们做严格区分。指针变量和普通变量一样,都是用于存放数据的,只是指针变量存放的数据很特殊,是为存地址。一般情况下,如果不考虑指针强制转换的话,我们要求某个类型地址必须放到对应类型的指针变量中,如下所示。int a=10;int *p=&a;// a空间的地址假设为0x07080345以上两句话,对于..原创 2020-12-23 13:50:02 · 4943 阅读 · 0 评论 -
结合内存来解析C语言语句的本质
下面结合内存来解析C语言语句的本质:int a:编译器帮我们申请了一个int类型的内存格子(长度是4字节,地址是确定的,但是只有编译器知道,我们是不知道的,也不需要知道) ,并且把符号a和这个格子绑定。a=5:编译器发现我们要给a赋值,就会把这个值5丢到符号a绑定的那个内存格子中a+=4:编译器发现我们要给a加值, a += 4等效于a=a +4,编译器会先把a原来的值读出来,然后给这个值加4,再把加之后的和写入a里面去,最后这个格子里面存储的内容就是9。C语言中数据类型的本质含义,是表示一原创 2020-12-17 14:17:49 · 176 阅读 · 0 评论 -
指针是什么?
指针是什么?我们的回答是指针就是地址。说得再全面一点,指针是一个变量,且这个变量是专门用来存放地址的。这就好比你想给A打电话,但你不知道A的电话号码,但你知道C有A的电话号码,而且你也有C的电话,这样你就可以间接地通过C来找到A,指针也是如此。通过下面的例子我们就可以看出用指针变量p来间接地获取了变量a的内容。...原创 2020-12-17 14:12:30 · 560 阅读 · 0 评论 -
指针类型的含义
C语言中的指针,全名叫指针变量,指针变量其实和普通变量没有任何区别(不管intloat等,还是指针类型int "或者float *等) 。只要记住:类型只是对其所修饰的数字或者符号所代表内存空间的长度和解析方法的规定。如int a和int "p其实没有任何区别, a和p都代表一个内存地址(如0x20000000) ,但是这个内存地址0x20000000的长度和解析方法不同。a和b的空间大小虽然都是4个字节(碰I5) ,但是解析方法是截然不同的,前者解析方法是按照int的规定来的;后者按照int *方式解析。原创 2020-12-15 22:13:41 · 3121 阅读 · 0 评论 -
谈谈C语言中的函数
不知道你是否思考过C语言中函数调用是如何实现的,主调函数是如何找到那些被调函数的。在C语言中,函数就是一段代码的封装。函数名的实质就是这一段代码的首地址,所以说函数名的本质也是一个内存地址。有了函数名(指针) ,也就是有了地址,我们才实现了函数的调用。...原创 2020-12-15 22:08:24 · 89 阅读 · 0 评论 -
实际编程时,节省内存和提高效率到底谁重要?
在32位系统中定义变量最好用int,这样效率高,因为32位系统中很多硬件本身都是32位的,配合定义的int型变量在内存中恰好分配4个字节,使得软件和硬件对于数据的处理非常契合,这样的工作效率自然就高。32位的硬件配置天生就适合定义32位的int型变量。千万不要单纯地认为定义char型变量由于分配了更少的内存空间,所以效率就更高,因此我们一直强调写程序时要尽量配合硬件特点。在很多32位系统环境下,当定义bool类型变量时,我们基本都是用int来替代。虽然bool型只需要一个位,但是我们定义一个整型替代时,原创 2020-12-15 22:06:18 · 430 阅读 · 0 评论 -
深入思考:如何管理内存(无OS时,有OS时)
对于计算机来说,内存容量越大,能够实现功能的可能性就更大,所以大家都希望自己电脑的内存越大越好。但是不管我们的内存有多大,一旦内存使用管理不善,程序运行时就会消耗过多的内存,这样内存迟早都被程序消耗殆尽。当无内存可用时,程序就会崩溃。因此我们说内存是一种资源,如何高效地管理内存对程序员来说是一个重要技术和话题。 在C语言中定义变量时,就会分配一块内存空间。如果想要获取更大内存空间的话,我们可以通过定义数组来实现。其实在有操作系统(OS)的前提下,我们还可以通过一些操作系统提供的接口来分配内...原创 2020-12-15 21:59:16 · 127 阅读 · 0 评论