c语言为什么要有指针呢?

作者&投稿:依湛 (若有异议请与网页底部的电邮联系)
~

因为指针通过地址传递参数,如果不用指针传送速度慢。

在没有C++语言的年代,没有面向对象、模板的语法支持,struct中还不能定义函数,用C语言想要对业务功能(算法,此处即指函数)进行抽象,不想依赖具体的数据结构/数据类型,此时就必须用指向函数的指针来实现抽象与具体的分离,

该函数的入参可以是void*,这样调用者就可以传入任意类型的参数了。后来有了C++,就用类成员函数和泛型(模板+functor)来代替了,这样做有更强的静态类型检查机制和编程约束,有利于减少滥用风险。

函数指针的一个典型应用场合是实现回调,因为此时还不知道具体函数定义,事件发生时才调用、才确定;类比于面向对象中的“多态”+设计模式中的“观察者模式”,回调的实质仍然是抽象。

扩展资料

C语言程序开发中,数组指针是有其独特的作用的,它可以用于限制函数接收指针索引的内存长度,利用编译器规范程序项目。在定义数组指针时,利用C语言的typedef关键字常常能够使代码更加易读:

typedef int Vector3d[3];

void transform(Vector3d *vector);

/* equivalent to `void transform(int (*vector)[3])` */

...

Vector3d vec;

...

transform(&vec);   

参考资料来源:百度百科—指针




C语言中既然有取址运算符&,为什么还要引入指针*?
编程中指针在使用以后,灵活多用,可以取别名来取地址 而地址操作符很繁琐,每次必须使用引用的变量 就如同指路:指针相当于你用地图来指 取地址符相当于你不能用路名,不能用门牌号码,不能用参照物。

C语言中“指针”和“指针变量”的区别是什么??
1、概念不同 “指针”是概念,“指针变量”是具体实现,指针也是一个变量,所以需要进行定义,而对于指针的定义,与一般变量一样。2、 存放地址不同 一个变量的(内存)地址称为该变量的“指针”,通过指针能找到以它为地址的内存单元。而指针变量是用来存放另一个变量的地址的(即指针)。

c语言为什么说指针是灵魂?能简单举个例子吗?谢谢
2.数组定义的是一组连续的内存空间,可以说每个单元都有自已的变量名(数组名+下标)……这样如果执行越界操作时,程序将会报错……3.还有就是用数组申请一组连续的内存空间明显要比用指针动态申请空间要简单得多……4.再者数组是用到很多的,如果你全部都用针指来代替,我们知道执行指针是危险的,多...

C语言中的指针问题到底是怎么回事~
知道小有建树答主 回答量:257 采纳率:100% 帮助的人:216万 我也去答题访问个人页 关注 展开全部 第一章。指针的概念指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还...

c语言为什么说指针是灵魂?能简单举个例子吗?谢谢
2.数组定义的是一组连续的内存空间,可以说每个单元都有自已的变量名(数组名+下标)……这样如果执行越界操作时,程序将会报错……3.还有就是用数组申请一组连续的内存空间明显要比用指针动态申请空间要简单得多……4.再者数组是用到很多的,如果你全部都用针指来代替,我们知道执行指针是危险的,多...

c语言中的指针应该怎么理解?
这是我收录的指针讲义第一章。指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让 我们分别说明。 先声明几个指针放着做例子: 例一: ...

C语言如果用指针去使用变量,和直接使用变量有什么不同。
p2=&a;} } 排序完成后,p1指向较大的数2,p2指向较小的数1,而a仍然等于1,b=2,它们的值是不变的。如果在另外的程序中同样调用了这两个变量,用指针就不会对其产生影响,这就是指针作用的一个方面。指针还有很多其它方面的作用,这也是c语言的一个特色,建议你好好地学一下,很有用的。

指针就是地址吗,指针变量难道不是地址?
如果p是一个指针变量,*p 表示了以 p 的内容为地址的变量,就是p指向的变量。可以这样来理解指针:指针是一种特殊的语言机制,它存放的是其它变量的地址,并且可以通过解引用操作符*,来获取该地址的内容。这也造成了一种指向的关系。各变量的类型推导,foo_p是指针,且指向int,故foo_p的类型是int...

C语言 指针函数 函数指针 什么区别联系?最好有例子?一定采纳
int foo(char);int (*bar)() = foo;这段代码同样也给了警告。为什么呢?因为在不使用原型的情况下,char,short,float等会被隐式提升到与其对应的更高级类型。而在这个绑定中,bar是非原型,这时可能会进行整型提升,而foo带有原型,调用时不需要进行提升。这样就有可能引发错误。以上就是函数指针...

学单片机C语言编程也要学指针吗?学了有什么好处?不学不行吗?
必须要学的,如果你想够用就行,可以不学,但是随着你接触的东西多了,学的东西多了,你就必须要会指针这种东西,不然后期发展很困难。就像楼上说的,会指针,你才能成为真正的高手

平乡县13596793152: c语言为什么会出现指针? -
素容水溶: 因为要有链表,有链表才能动态存储,否则只能线性存储,有时不利于内存充分利用和存取效率.但也不要被指针限制思维,你要是能想出不用指针又能高效的的更好的解决方法,那你也可以自创一种语言.语言只是形式,关键是其背后的逻辑.

平乡县13596793152: 刚学c语言,对指针概念不清楚,为什么要有指针啊,好困惑啊!还有就是编程是不是天分很重要,如果像我这样 -
素容水溶: 指针储存的是地址, 运用指针的地方一般都是链表,而需要用到链表的地方,就是方便查找和储存,我和你一样也是没有天分,但是这种语言就是多练多写,之后自然能驾轻就熟

平乡县13596793152: 我是c语言初学者!我想请教下!在c语言中为什么要引入指针这个概念!它的微妙之处在哪里?有大神帮我分 -
素容水溶: 在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍.为了正确地访问这些内存单元,必...

平乡县13596793152: c语言中,要用函数直接调用就好啦.为什么还要用指针??? -
素容水溶: 函数名,其实在汇编一级是地址,指针里存得也是地址,两者没啥区别,但在我们编译的时候,由于编译器要对参数进行类型检查,所以直接调用函数用起来比较方便,而指针这需要定义成指向函数的指针,才能通过编译器的类型检查.为什么要用指针?有许多的WINDOWS API是回调函数,需要函数指针.

平乡县13596793152: C语言中为什么要使用指针访问数组元素? -
素容水溶: 用指针有一些好处:可以再指针上直接进行计算 比如加减指针.另外当数组作为参数传递到函数中的时候,用指针是很方便的.其实数组的名字就是一个指针.有一本经典的书 《C专家...

平乡县13596793152: C语言中既然有取址运算符&,为什么还要引入指针*? -
素容水溶: 编程中指针在使用以后,灵活多用,可以取别名来取地址 而地址操作符很繁琐,每次必须使用引用的变量 就如同指路:指针相当于你用地图来指取地址符相当于你不能用路名,不能用门牌号码,不能用参照物.

平乡县13596793152: 为什么说指针是 C 语言的精髓? -
素容水溶: 因为C语言最重要的一点是可以直接访问内存地址(任意的地址,但出错不出错是另一回事),而指针是保存这种值的变量就非常重要.C语言中的很多东西,实际是受限制的指针,比如数组名和函数名.比如,指针在C语言中的一个很重要的用途是动态绑定(运行时绑定),动态绑定在C++、C#这些更高级的语言中以虚函数的方式实现,但是在C语言中没有虚函数的概念.如运行时,才去判断当前环境(比如系统版本、不同的许可证、有没有相应的DLL等),用LoadLibrary和GetProcAddress调入不同的DLL中的不同函数赋值给函数指针.

平乡县13596793152: C语言的指针有什么实际作用? -
素容水溶: 指针实际上就是一个内存地址,比如一个函数指针,就是一个函数的入口地址,通过这个地址,系统就可以找到这个函数的位置并调用它.简单地说指针就是指向变量和对象的地址.指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递.还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行,大大提高了效率.以上还只是指针的初步应用,随着你在C++学习上的逐步深入,你会发现更多的用途的.

平乡县13596793152: C语言的指针有什么用? -
素容水溶: c提供了两种访问变量的方法.通过变量名和通过地址.用指针就是通过地址来引用变量的.但地址也必须存储在内存中.所以就用指针变量 来存储变量的地址的.

平乡县13596793152: 为什么指针是c语言的灵魂? -
素容水溶: 1.他可以直接访问硬件,这是灵活性和效率的体现,程序离硬件越近自然效率越高,当然运用不当也可导致效率低下2.难掌握及太危险,如果对指针理解含混,访问过程不当易导致程序奔溃或隐藏潜在危险

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网