搜索

C语言中的指针到底有什么用

发布网友 发布时间:2022-03-22 09:51

我来回答

14个回答

懂视网 时间:2022-03-22 14:13

   

在C语言中,指针的使用非常广泛,使用指针往往可以生成更高效、更紧凑的代码。

1、指针的使用使得不同区域的代码可以轻易的共享内存数据,这样可以使程序更为快速高效;

2、C语言中一些复杂的数据结构往往需要使用指针来构建,如链表、二叉树等;

3、C语言是传值调用,而有些操作传值调用是无法完成的,如通过被调函数修改调用函数的对象,但是这种操作可以由指针来完成,而且并不违背传值调用。

总结

在C语言中,指针的使用非常广泛,使用指针往往可以生成更高效、更紧凑的代码。



热心网友 时间:2022-03-22 11:21

所有变量值保存在内存中,而每个内存都有一个地址,所谓地址就是一个整数编号,如同门牌号码用于定位(专业术语叫寻址),一个地址对应一个字节(8bit)的内存单元。

如今的编译器,一个整数int类型的值占用32位bit,也就是4字节,编译器将第一个字节的编号定义为该整数的地址,由于保存地址的变量就像一个箭头指向某地址,而称为指针变量。

int a =10; //定义一个整数变量a,对其赋值10
int *p =&a;//定义一个指针变量p,对其赋值a的内存地址,&符号意思为引用跟随其后的变量地址。

cont <<a<<end; //输出 a的值:10
cont << p << end ;// 输出p的值:XXXXX 其实为a的地址,该地址由编译器和运行时确定。
cont << *p <<end; //输出p指向的地址中的值:10,也就是a的值,*星号放在变量前面意思就是取该变量中的地址所指内存中的值。
读取过程为:p的值(a的地址)->寻址->取值

由于指针是一个变量的首个字节的地址,所以要告诉编译器被指地址包含连续多少个字节,因此指针也有类型。比如上面例子中声明了p指针是个整数指针,这样编译器知道p指向一个4字节的内存块。

你可以将指针变量看做一般的整数变量来理解,用来保存一个整数(地址是个整数),只是,该整数代表着某地址,在这里是a的地址。

在C/C++中很灵活,但是也很危险,也很难学,如果指针指向错误的地址会引起程序崩溃,因此在C#中已经被微软封装了,但内部还是有指针的。

如果有必要,C#中也可以使用指针,使用非安全代码,在项目生成选项卡中勾选“允许非安全代码”,然后就可以使用指针了,不过不建议这么做。
unsafe
{
int a = 10;
int* p=&a;
}

热心网友 时间:2022-03-22 12:39

指针起的作用是标识一块内存。电脑内存上的每一个字节都具有一个编号,称为地址(可以简单理解为指针),任何读写内存的指令都必须携带地址信息,否则电脑不知道读写那块内存。不管你的程序是用什么语言写的,要运行数据和代码必须驻留内存,CPU要执行指令必须有一个“指针”(程序计数器)指向内存的代码块,如果某个指令要操作内存数据,该指令必须携带额外的地址信息。

C语言的指针让程序员具备直接操作和管理内存的能力,这个能力也是C语言适合编写底层软件的原因之一。现在拿得出手的操作系统都是用C语言(有时也用C++)和汇编语言编写的。在底层软件领域C语言是占统治地位的。

C语言对内存的操作都是通过指针来实现的,虽然C语言可以通过变量名访问内存,但是编译过后变量名被转换为地址。

其他语言虽然没有指针或者地址概念,但是访问内存是需要地址的,所以与地址相关的底层操作由该语言的运行时库承担了,对程序员来说,地址就“不存在了”。

热心网友 时间:2022-03-22 14:30

指针其实就是内存地址,如果有汇编基础就容易理解,典型[XXXX]表示,初学者可以先不求甚解,以后用多了就会明白的。

热心网友 时间:2022-03-22 16:38

指针实际上就是一个内存地址,比如一个函数指针,就是一个函数的入口地址,通过这个地址,系统就可以找到这个函数的位置并调用它。

热心网友 时间:2022-03-22 19:03

指针是一个32位数据,代表一个内存地址,这块内存可以放任何东西。就是说指针可以操作任何东西,所以指针很灵活、很强大,但也引入了复杂性。只要理解了指针的原理,再复杂也可以一点一点的分析清楚。C#的引用跟指针有相似之处,并且可以在unsafe块里直接使用指针操作数据。

热心网友 时间:2022-03-22 21:44

C#也有指针,只是它是面向对象的,有着大量的封装,在C#里指针(*)变成了引用(ref)、(a->b)变成了(a.b)。指针就是地址,把一个内存单元画成正方体(画在纸上能可见3个面),上面分别标注: 变量名、地址、值。这就形象多了。

热心网友 时间:2022-03-23 00:42

C#可以做的,C语言全部都能做。但是C语言能做的,C#未必做的了。
但是C语言做有些东西会很繁琐,比如图形界面之类的。
指针指向内存地址,意味着C语言可以直接操作计算机的硬件,只要有地址,这也就是C语言适合底层开发的原因。

热心网友 时间:2022-03-23 03:57

要注意区分变量的指针和指针变量两个概念。。。

热心网友 时间:2022-03-23 07:28

能理解为逻辑上顺序排列的门牌号?

热心网友 时间:2022-03-23 11:16

c要是没指针,那它早淘汰了

热心网友 时间:2022-03-23 15:21

指针其实是某些处理的鼻祖 c#或者java里面没有指针 但是有引用 其实引用就是指针的一种封装形式 你觉得有了c这种高级语言 汇编语言甚至机器语言就是否没用了呢? 指针非常灵活强大 但是用起来确实非常容易出错 c语言毕竟不支持引用或者其他的变相指针形式 要用c的话一切就要用纯指针实现(纯指针可以节省封装所用的资源 加快处理速度 提高程序效率) 就像嵌入式的内核或者操作系统内核要用c 不用java一样 有的时候稳定性和可靠性是第一考虑 但是有的时候 高效才是第一考虑 而稳定性需要靠程序猿手动实现(而不依赖程序的某些try catch 这种东西)

热心网友 时间:2022-03-23 19:42

指针是c的关键

热心网友 时间:2022-03-24 00:20

指针是不是取地址用的啊
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top