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

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
逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 怎样才能注册一个新的 怎么用电脑注册 学习C语言用什么编译器? 如何快速注册 C语言用什么编译器? C语言的编译器是用什么语言写的? c语言编译器是用什么于语言写的 我想注册一个怎么注册 c语言用什么编译器好 c语言编译器 是什么东西 初学c语言用什么编译器比较好 那个,刚学C语言,该用什么编译器 如何才能注册新? 编写C语言用哪个编译器比较好 现在学习c语言都是用什么编译器 我想申请一个怎么申请的 新手用什么c语言编译器? 网上能不能注册 学C语言用什么编译器好? 怎样申请并注册 c语言中用指针的好处有哪些? 新浪微博被人举报会怎么样 C语言中指针的作用是什么? C语言指针到底有什么用 新浪微博举报别人会被发现吗 关于c语言中指针的作用? c语言指针定义,有什么用,作用有 c语言的指针到底有什么用? C语言指针的意义 C语言的指针有什么用 指针变量的作用(C语言) C语言中一个程序用指针有什么优势么? C语言的指针有什么用?编程不一定要用指针吧?请高手指点一下。 C语言中为什么要用到指针呢 ? 在C语言中什么是指针?指针是干什么用的?,有什么意义? 在C语言中函数类型的指针有什么作用 C语言的指针有什么实际作用 C语言中指针这一部分学了有什么用? c语言中指针怎么使用? C语言的指针怎么用啊?