问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-02-28 13:53

我来回答

6个回答

热心网友 时间:2022-02-28 15:22

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

在没有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);   

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

热心网友 时间:2022-02-28 16:40

很多情况可以用到。这需要在编程过程中形成一种思维。
如 将一个结构体传递给一个函数。
如果不用指针,传送速度慢,如果通过指针,只要传递一个地址。
struct example
{
int i;
int j;
int f;
char a[1024];
};
void main()
{
struct example ex;
fun(&ex);//将结构体ex的地址传递给函数fun
}
fun(struct example *p)
{
}

热心网友 时间:2022-02-28 18:15

指针通过地址传递参数,可以双向传递值。
如果你是计算机专业的学生,看《高级语言程序设计》里面有详细介绍二者的区别,也有程序对比(两数交换的函数)。我比较懒,你就靠自己了。

热心网友 时间:2022-02-28 20:06

C语言中就指针最难,指针主要是处理地址不像数组那样挨着好找的情况,把下一个数的地址给上一个保管,才能一个接着一个找到。不过我觉得很烦了,最好还是学java,高级的,更符合人

热心网友 时间:2022-02-28 22:14

指针是C语言的精华,不会指针,相当于C语言根本没学明白!等你到嵌入式系统的编写 或者 上位机APP的程序编写的时候就知道了 C语言说到底是一种交流语言 类似于英语一样

热心网友 时间:2022-03-01 00:39

const unsigned int VOICE_TYPE_0[]={0xFFFF};
const unsigned int VOICE_TYPE_1[]={0xFFFF};
const unsigned int VOICE_TYPE_2[]={0xFFFF};
const unsigned int VOICE_TYPE_3[]={0xFFFF};
const unsigned int VOICE_TYPE_4[]={0xFFFF};
const unsigned int VOICE_TYPE_5[]={0xFFFF};
const unsigned int VOICE_TYPE_6[]={0xFFFF};
const unsigned int VOICE_TYPE_7[]={0xFFFF};

const unsigned int *VOICE_POINT[]=
{
VOICE_TYPE_0,
VOICE_TYPE_1,
VOICE_TYPE_2,
VOICE_TYPE_3,
VOICE_TYPE_4,
VOICE_TYPE_5,
VOICE_TYPE_6,
VOICE_TYPE_7
};
/******************************************************************************/
voice_delay=VOICE_POINT[voice_type][voice_status];
不使用指针。
程序太长了。
用一个
switch(voice_type)
{
case 0:voice_delay= VOICE_TYPE_0[voice_status];break;
case 1:voice_delay= VOICE_TYPE_1[voice_status];break;
case 2:voice_delay= VOICE_TYPE_2[voice_status];break;
......

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...全程班已经上线了,现在有哪些优惠政策呢?求介绍下 苹果4s如何进行通话录音 万王之王3索泰大礼包激活码 高分求万王之王3的索泰包卡号,能用追分 索泰显卡里的万王之王3礼包 。 万王之王3远古裂缝求大神帮助 万王之王3索泰和公会礼包激活码 悬赏 万王之王3新手公测礼包。。速度、 急!!高分求万王之王3的索泰包的卡号!! 万王之王3 索泰礼包序列号 C语言中指针是什么 C语言中指针有哪些用处。或者可以用来做什么,请简单举例说明 C语言中的指针有什么意义? 怎么才能把对方的注销 手机号申请的如何注销 c语言编译器是用什么语言编写的 怎么把注销了 不是退出 是让他彻底消失 现在学习C语言,编译器都用什么啊? 不要了怎么注销 怎么注销别人? 现在C语言一般都用的什么编译软件? 如何注销本人另外的? 微软用什么C语言编译器 可以注销么?用手机号注册的怎么注销啊? 有哪些比较好用的c语言编译器 不想玩微信了,怎样才能注销? C语言二级用什么编译器好? 怎么注销 c语言代码用哪个编译器都不能编译了 C语言用什么编译器最好 C语言指针是什么? C语言中指针有什么特别的地方 在C语言中,exit(0)是什么意思? c语言中,exit(1)是什么意思?求助~ C语言中:函数exit(-1);与exit(0);的区别是什么?是返回值吗? C语言属于哪一类语言? 手机照片回收站清空了能恢复吗? C语言和C++语言的区别是什么? C语言语言中FOR的用法 C语言中的for语句 用法 急!c语言多个for语句的用法。 C语言for循环详细讲解 C语言中,for语句的用法? c语言中for语句是怎么用的? C语言中,for的使用问题? C语言for循环的使用和讲解有哪些? C语言和java语言的区别和联系? java 和c语言的主要区别在哪呢? java和c语言有什么区别和联系? Java和c语言的区别