C语言中指针是什么

C语言中指针是什么,第1张

我们都知道:C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类

数据类型,int指针类型,double指针类型,char指针类型等等。

通常,我们用int类型保存一些整型的数据,如 int num = 97 , 我们也会用char来存储字符: char ch = 'a'。

我们也必须知道:任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。

因此:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。

cpu自己有运算器和寄存器,通过总线与存储器件相连,在执行运算时,

需要将数据冲存储器件上面将参与运算的数据读入,运算完成后再送出到

存储区。那么cpu读入时需要访问存储器件的某个单元,需要指定这个单元

的编号,我们管这个编号叫存储地址。

比如:int a[10],p; p=&a[3];a就是一个拥有10个整型数据的数据区

的首地址,变量p是存放地址的,称为指针型变量,赋值时需要取相应存储

区的地址,p=&a[3];就是取数组a的第4个单元的地址给p,那么p就拿到了

这个单元的地址,p=5;就相当于a[3]=5;的 *** 作,p++;后p指针就指向a[4]。

在 *** 作大块数据时,一般记录首地址(数组指针),然后根据首地址再加

上偏移量来访问整个数据,在你程序中写a[3]时,计算机就会取a数组对应

的首地址再加3个整型偏移量来访问相应数据。用指针p访问a数组的好处

是,不用每次计算a加多少偏移访问数据,而是使p指向某数据后可以p++

或p--来访问前一个或后一个数据。

注意:

1指针存放地址用,不是存储实际数据的,它是用来找数的,在

程序中要注意这点,往往出问题的是,指针还没有赋值就用来 *** 作,或

用指针来存放数据,如:int p=15,s[10]={ 0,15,{0} };的

p指针赋值有问题,这样计算机会把15当成地址存放到p变量中,以后用

p访问得到的数据就不是你想要的数据了。(应该类似:p=s+1; p=15;)

2指针访问数据区一般需要程序来控制不要越界,比如定义了10个单元

的数据区,你不能让指针超出这10个单元的范围,否则得到的数据就是

不靠谱的。

3指针的定义只是开设了可以访问数据区或数组的变量,数据区和数组

需要你的程序另行开设,然后把数据区或数组的某个单元的地址赋值给

指针变量,不要认定义了能访问数组的指针,数组就定义好了。

4指针存放的地址最好不要用来与其他地址比较,除非你能确认地址比

较的结果肯定是你想要的。

5举例来说,int a[10],p=a;中a和p都是指针(地址),但a和p是不同的

在编译器眼中,a是一个数据区的首地址,是一个标记,你程序中使用a

时,编译器会知道用数据区的首地址来替换 *** 作,而p是你自己程序开

设的变量,可以在程序中 *** 作比如p++; p=a;等,但作为记号的a就不能

在程序中 *** 作了,如a++; a=p;就是错的了。

6子程序如果参数是指针型的,这个参数由子程序开设的指针型临时

变量存储,这个临时变量可以进行 *** 作,但不会返回给调用者的指针型

变量。

如:int a[10],p; int f(int s) { s++; } main() { p=a; f(p); }

s再怎么加减都不会影响p。

c语言指针通俗理解就是指针类型。

指针类型:指针类型intp,虽然p是写在一块的,但是变量名是p,类型是int,也就是整形的指针类型,理清指针类型和变量后,

其实已经差不多明白了结果可见变量p里存放的是a的地址。指针存储过程及原理这一段代码看看计算机是如何运行的可以将int类型变量的地址赋给int指针类型变量&是取地址符,&a就是拿到a的地址。

首先,我们来谈谈软件方面的故障。谈到这里,大家马上会想到系统感染病毒了,或者是鼠标驱与 *** 作系统发生冲突。但还有一个原因,可能不是每个人都碰到过,那就是你中了木马,系统为他人远程控制。对这类问题,建议先用软盘在DOS下杀毒,如果无效,那就请重装系统吧。另外,如果你的电脑经常上网,建议下载THE CLEAN软件来查杀木马。

接下来我们来谈谈更复杂的是硬件的故障。首先,我们应该熟悉一下机械鼠标的工作原理:通过移动鼠标,带动胶球,胶球滚动又磨擦鼠标内分管水平和垂直两个方向的栅轮滚轴,驱动栅轮转动。栅轮轮沿为格栅状。紧靠栅轮格栅两侧,一侧是一红外发光管,另一侧是红外接收组件。红外接收组件为一三端器件,其中包含甲乙两个红外接收管。在水平和垂直栅轮夹角正对方向有一压紧轮,它使胶球无论向何方向滚动都始终压紧在两个栅轮轴上。 通过 ps/2 口或串口与主机相连。接口使用四根线,分别为电源 , 地,时钟和数据。正常工作时,鼠标的移动转换为水平和垂直栅轮不同方向和转速的转动。栅轮转动时,栅轮的轮齿周期性遮挡红外发光管发出的红外线照射到接收组件中的甲管和乙管,从而甲和乙输出端输出电脉冲至鼠标内控制芯片。由于红外接收组件中甲乙两管垂直排列,栅轮轮齿夹在红外发射与接收中间的部分的移动方向为上下方向,而甲乙接收管与红外发射管的夹角不为零,于是甲乙管输出的电脉冲有一个相位差。鼠标内控制芯片通过此脉冲相位差判知水平或垂直栅轮的转动方向,通过此脉冲的频率判知栅轮的转动速度,并不断通过数据线向主机传送鼠标移动信息,主机通过处理使屏幕上的光标同鼠标同步移动。 电脑启动时,windows通过接口初始化鼠标。如果鼠标电缆中有一根线断了,主机会给出鼠标未安装,请你关机安装鼠标的信息。如果在使用中拔下鼠标接头或鼠标电缆接触不良,则鼠标系统瘫死。

知道了鼠标的基本工作原理,下面我们共同探讨一下鼠标指针为何会漫屏飞舞:

指针移动说明鼠标通过串行数据线给主机送去了鼠标移动信息,但此时鼠标又未动,鼠标芯片怎么会发出移动数据呢?其原因是鼠标中红外发射管与栅轮轮齿及红外接收组件三者之间的相对位置不当,再加上主机通过接口送出的电源电压与鼠标匹配不好。当某一时刻鼠标中某一栅轮恰好停于使接收组件中甲乙两管产生相同电压的位置,而此电压恰巧又是鼠标芯片识别亮暗信号的判定阀值电压,即此电压有可能被鼠标芯片识别为亮,也有可能识别为暗。若此时鼠标芯片对甲管输出识别为亮信号,乙管输出为暗信号,鼠标依此对信号进行处理,而芯片的处理必引起接收组件中甲乙接收管的输出电压及鼠标芯片对亮暗判别阀值的微小的变化。因为鼠标芯片也是时钟驱动的数字电路,它对信号的识别也有时钟周期,当下一识别周期到来时,则判别结果会是甲为暗乙为亮。至此,鼠标芯片两个识别周期的识别结果不同,于是芯片得出了栅轮转动的信息。此过程循环,则指针向一方向快速匀速移动直至屏幕边沿。

关键在于主机输送给鼠标的电源电压使鼠标中某一红外发射管发射的红外光在感光组件中甲乙两感光管产生的光信号电压正好处于鼠标芯片判别亮暗信号的识别分界阀值点上。此点非常巧合,所以鼠标指针游动的出现也极随机,有时可能几天不出现,而有时又频繁发生。此故障一般仅发生在一个方向上。因为该故障与主机接口输出的电源也有关系,故可能会在一台机器上出现故障的鼠标在另一机器上工作正常。

硬件方面的解决方法:先检查硬件有没有冲突(比如和Modem等其他的外设)然后试着检查你鼠标接口的针是否弯曲,断了:然后,拆开鼠标,看里面是否有脏物缠绕或反拧?将其清除再试试。或者,换到其他的电脑上试试,看是否故障依旧,有没有给出硬件故障的信息。还不行的话,只有调整故障对应方向红外发射管、红外接收组件与栅轮的相对位置,看能否恢复了。最后一招干脆买个新的算了。

当时不是按照字母来的。。。。这里s的指针类型是char,所以s+1以后往后移动的位置就是内存中char类型需要占用的空间,所以只会移动到下一个char类型的被存在内存里的东西的地址开始。。。。这样,如果a,b,c,d这些字母是在连续的地址上存储的话,c的地址跟d的地址之间自然相差一个char类型,s+1就 会work了。。。

当然,如果不是char类型,别的类型,虽然程序里是+1,编译器自然会转换一下看在真实的内存里需要加多少。。。。

以上就是关于C语言中指针是什么全部的内容,包括:C语言中指针是什么、c语言指针怎么理解,什么时候会用到指针,要注意哪些方面、c语言指针通俗理解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9692796.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存