C语言#语法程序员

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

2018-02-25  本文已影响59人  小辰带你看世界

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语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

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

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

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

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

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

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

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

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

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

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

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

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

这样写也是可以的。

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

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

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

今天的内容就到这了,指针还没写完,因为是重点,得细致的写,不能辜负读者。如果喜欢,收藏吧!关注我吧!C语言篇快结束了!

上一篇下一篇

猜你喜欢

热点阅读