C语言/C++编程学习:四种类型指针

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

很多小伙伴都老是会碰到疑问,其实还是基础没打扎实,这些题如果你不看答案你能知道多少呢?如果还有很多不知道就证明基础没打扎实,如果你还在入门纠结,如果你还在苦恼怎么入门!小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

我们前面学了六种基本数据类型,后面还要学习其他类型,所有的类型都能派生出相应的指针,只需要在定义的时候加星号*就可以了,而且int* i和int *i是完全相同的,我们前面讲到const的时候说了,用它修饰的数据是无法改变的,由const就引出了四种指针,这也是公司招聘最喜欢出的题目之一。

const int *p1;

int const *p2;

int* const p3;

const int* const p4;

这四种类型,p1和p2是相同的,因为const放在数据类型的前面还是后面是无关紧要的,它们代表的是指向常量的指针变量,意思就是指针自身可以改变,它们可以指向其他地址,但是它们指向地址中的数据是不能改变的;p3代表常量指针,意思是指针自身不能改变,但是它们指向地址中的数据是可变的;p4是指向常量的常量指针,指针自身和指向地址的内容均不可改变,当然它和int const* const p4这种形式也是相同的。下面我们看一个程序:

其中错误示范和相关说明已经用注释的方式写明了,自己可以试试把注释里的错误示范添加进来,看看编译器下方的报错情况。

这个不是去背的,是要理解,有个最简单的原则就是就近原则,const和数据类型(这里举的例子是int)谁前谁后不要紧,关键是const和*哪个里指针变量近,如果是const离的近,那么表示指针p本身不变的值,但是*p是可变的;如果*离的近,那么表示*p是不变的(也就是const),p本身的值使可变的

接下来我们看多重指针变量,我们知道普通的指针变量里面存放的是指针(也即地址),然后地址里面存放的是数据,多重指针我们拿最简单的二重指针为例(当然也有三重指针、四重指针......但是那样难度会越来越大),我们的二重指针变量里面存放的是普通指针变量,普通指针变量里面存放的是地址,地址里才是最后的数据。我们还是以程序为例来讲解:

可以看到,变量num提供了两个信息量,它的地址是0022FF44,num里存放的数据是10,;普通指针变量ptr1可以提供三个信息量,ptr1指向地址中存放的值(即num)为10,ptr1本身的值(即&num)为0022FF44,还有ptr1自身的地址是0022FF40;二重指针变量ptr2提供了四个信息量,ptr2指向的不是普通地址而是指针变量ptr1。我们可以看到所能代表的信息量比普通指针要大,但是也比普通指针要难理解,所以我建议是指针层数不要超过3层,不然会变得相当难理解,我在下面画了个图供大家理解:

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

注意其中的%d是打印十进制,%p是打印十六进制,关于进制:

十进制是我们人类世界最普遍的进制,但是在计算机里面,它只能识别0、1,所以最常用的就是2的N次方进制,这样表示起来比较方便,比如二进制、八进制、十六进制。

十六进制:以16为基底,十六进制的数字等价于十进制的0~15,表示方式是0~9和A~F(或a~f)。因为我们需要一种方式区分十进制和十六进制,通常在十六进制前面加上0x或0X,所以如果在程序里见到0x66这种就是十六进制数

八进制:以8为基底,八进制数字为0~7,对应二进制中的3位,通常在八进制数前面加上0,例如014,就会被编译器看作八进制数。八进制数起源于计算机内存采用36位字的时代,那时一个字是3位,所以36位二进制字可以写成12个八进制数,不过八进制目前已经很少使用,知道它们就行了

二进制:以2为基底,只有0和1两种值,就是我们常说的0、1代码,也是计算机最底层能够识别的东西。经常有人说使用机器码编程的人才是真正的大神,所以很多人都认为就是使用0、1代码编程,这是完全坑爹的说法,就算使用机器码编程,也是使用十六进制,现在没有人会再次傻到用0、1来写代码的,假如在计算机内存地址为0x004935FF的地方有一条汇编语言指令:jmp 0x12345678,这就是一条跳转指令,翻译成机器码就是E8 74 20 EB 11,这个就是十六进制机器码,看不懂不要紧,主要就是让大家了解下有这么一回事就行了。

希望大家能够把前面的基础打牢固一点,前面的每个例子都要搞懂并且自己敲出来运行,不然学到后面会很吃力的,到时候又要回头来补基础知识,这样浪费的时间其实更多。有问题大家可以在群里提问。

最近重感了,睡得比较早,文章也没更新,我再最后强调一遍,有三种问题我是不会回答的:1是直接求代码的伸手党,2是网上找的代码出现的问题,3是没有任何提示信息的问题。很多人问问题就是这样,提示信息是什么?截图在哪?没有!代码在哪?没有!操作步骤呢?也没有!你是来提问题的,不是让别人来猜你的问题的,你给出了提示信息,别人可能两三分钟就帮你解决了,你什么都没有,你是在浪费大家的时间,连提问都不会的人有多大几率能得到正确的答案呢?

我们知道每一种数据类型都可以扩展出指针变量,那么普通变量和指针变量到底有什么不同呢,前面我们已经说了它们之间的一个不同点,就是它们存放的数据,同样的int i和int *p,假设我们同时为它们赋值为1,i=1和p=1,i=1表示往变量i的地址中存放整数1,而p=1表示往指针变量p的地址中存放地址1,可见同样的数据1,但是赋值给普通变量和指针变量所代表的含义是截然不同的。为了便于大家进一步的理解普通变量和指针变量的区别,我们今天讲它们的第二个区别,就是它们的大小不同,在我的32位机器上,我特意选取了char、short、int、double四种不同长度的类型来测试,程序如下:

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

由此可见,指针变量的大小在我的32位机器上是始终为4字节的,这是为什么呢,这是计算机组成原理的知识,不要求大家掌握,我简单的谈下,计算机里面有两个最重要的组件,cpu和内存,cpu是所有运算和控制的中心,内存里存放了最重要的代码和数据,cpu和内存之间有多条线进行连接,其中两组很重要的线叫做数据总线和地址总线,cpu从内存里取数据和存放数据,都是先通过地址总线来寻找内存中相关地址,从地址中得到数据或存入数据都是数据总线进行数据传送的,之所以称为32位机器,是因为机器表示数据使用的是32根数据线(每根数据线只能表示0或者1)传送数据,我们可以想到数学里的排列组合,如果是2根数据线,那么我们能表示的数据大小是2的2次方(0~2的2次方-1);如果使用8根数据线,那么能表示的数据大小为2的8次方(0~2的8次方-1),这其实就是古老的8位机;如果使用16根数据线,能表示的数据大小就是2的16次方(0~2的16次方-1),这就是32位机器的上一代产品16位机器;然后就是我们使用32位数据线的32位机器;再接下来还有64位机器。在我的32位机器上使用的地址总线也是32根,很显然它能表示的内存地址大小就是2的32次方,范围为0~0xFFFFFFFF(16进制一位代表4位二进制,这在前面已经讲过),所以指针大小自然就是32位,即4个字节。

这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容