黑客基础—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 *p,x=2;*p=5;

请问这样可以吗?

如果你认真看了我上面的内容,那么就不可以。这是一种内存盗用的行为!很危险!因为指针没有初始化,可能指向内存中的任意一个位置,这就导致了后面给他赋值可能会篡改指针原来指向的那个值。如果那个值刚好是应该被其他程序调用的,那么就会造成轻则程序错误,重则程序崩溃的后果!

黑客基础—C语言编程篇—指针

好,基本的差不多了,下面看几个常见的形式:

int x=1,*p;p=x;

&*x等价于x&*p等价于&x或者p*p+1等价于++x*p++等价于*(p++)这里得注意一下优先级

下面我们在来看看指针作为函数的参数会发生什么。(这里有个概念,很多新人,我保证你会错的很惨!)

首先我们就要明确一个概念,实参的值是可以传递给形参的,形参却无法改变实参的值!(如果你不用指针去改变的话),因为函数的参数是单向传递的。

问题来了,如果函数的形参是指针呢?在传递的过程中,哪些地方会变动?整个流程你心中是否有数?

我开始解析了。首先,实参指针会把自己的地址传递给形参,然后形参对地址做出一系列的改变、赋值等操作,这里要注意的是,形参已经拥有了实参所指的地址,也就是说,形参怎么操作都会对实参所指的那个内存地址产生影响!反过来,如果你再对实参进行操作,那么那个内存地址里面的值也会改变。总结成一句话就是:形参实参都会直接对内存修改!(因为是指针)

黑客基础—C语言编程篇—指针

这里还有一个注意点,那就是函数调用以指针为参数的实数时,形参与实参的指针类型必须是指向同一种数据类型的,即类型相同,否则出错。

还没完,我还有一个坑!请问:可以通过修改指针形参的值来修改指针实参的值吗?我建议读者把这句话读5篇以上再思考!

我不卖关子了,实话告诉你吧!不可以!什么?小编你上面不是说可以修改的吗?怎么这里就不可以了?

我想说,请你看仔细了,很容易理解错这个概念!这里修改的是指针形参的值,即指针形参的地址!通过修改形参的地址,是无法改变实参的地址的!这就和我刚开始提的概念相一致了。单向传递!不过,指针形参所指向的变量值的修改,可以改变对应实参指针指的变量。

最后一个小知识点:假设下面变量都合法,没有语法错误,p1p2是指针,分别指向abexchange(p1,p2)等价于exchange(&a,&b)

这样写也是可以的。

哦对了,差点忘了上面第一题的答案,看图:

黑客基础—C语言编程篇—指针

简单提示一下吧,fun括号里面的是字符,0是字符不是数值,下面*p!=0这里的0是数值……

文章最后

怎么快速学C/C++,有什么方法,打算深入了解这个行业的朋友,可以加C/C++学习群:648778840,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2019最新的C/C++资料和0基础入门教程,欢迎初学和进阶中的小伙伴。

每天晚上20:00我都会开直播给大家分享C/C++编程学习知识和路线方法,群里会不定期更新最新的教程和学习方法,大家都是学习C/C++的,或是转行,或是大学生,还有工作中想提升自己能力的前端党,如果你是正在学习C/C++的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实,非常适合新手学习,有不懂的问题可以随时问我,工作不忙的时候希望可以给大家解惑。

学习思路:

黑客基础—C语言编程篇—指针

学习资料:

黑客基础—C语言编程篇—指针

相关推荐