首页

文章

C语言的指针有什么优缺点?

发布网友 发布时间:2022-03-31 02:13

我来回答

5个回答

热心网友 时间:2022-03-31 03:42

1、指针的优点

是标识一块内存。电脑内存上的每一个字节都具有一个编号,称为地址(可以简单理解为指针),任何读写内存的指令都必须携带地址信息,否则电脑不知道读写那块内存。

不管程序是用什么语言写的,要运行数据和代码必须驻留内存,CPU要执行指令必须有一个“指针”程序计数器指向内存的代码块,如果某个指令要操作内存数据,该指令必须携带额外的地址信息。

2、指针的缺点

 指针可以操作任何东西,所以指针很灵活、很强大,但也引入了复杂性。

扩展资料

1、指针利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。

2、输出一串字符时,只需要知道它的第一个字符的地址,就可以将这个字符串输出,而第一个字符的地址,可以用指针储存。所以有n个字符串时,就可以用n个指针来储存。

3、为了保存一个数据在内存中的地址,就需要指针变量。因此指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。

热心网友 时间:2022-03-31 05:00

个人觉得是很好的一篇文字,说得很清楚:

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++的一个自洽子集,也具有强大的功能,同样值得学习。

几点学习建议:
1.基本概念很重要。无论学C,还是学C++,基本概念都是第一位的,也是比较困难的,但只有把握了基本概念才能把握整体脉络,才能居高临下。
2.C是C++的子集,它的基本概念和设计方法相对比较容易理解,初学者可从它入手。
3.如果要学好C++,建议初学者最好别在如VC,BCB平台下写程序,那种自动化的代码生成,花花绿绿的界面,会让你手足无措。最好先找一片空地(unix,dos),从头做起,写几个大点的程序,数个回合,再到VC,BCB下看看,你会轻松得很。在我看来,学好C/C++是成为VC,BCB高手的必由之路。
4.不要妄想速成,必须得一个byte,一个bit的去抠,尽量搞清楚每一个问题。
5.几本好书:
机械工业出版社的那套“计算机科学丛书”从C到C++,到面向对象设计,一应俱全,都*是经典中的经典,而且价格公道,童叟无欺。
国内也有几本好书,谭老爷子的书好倒是好,就是程序错误太多。强烈推荐清华周之英的《现代软件工程》(上、中、下),它是我所见到的国内少有的一本好书,精华的精华,要点的要点,细细品来,至少也属降龙十八掌等级的东东。

如果还是有人想学习C/C++的话, 有一些小问题我还是乐意解答的. 但是我认为学习C/C++是不重要的, 重要的是如何锻炼你的思路. 不要找一些连自己都搞不清的问题去做.

我认为虽然 "潭浩强" 同志有骗钱的嫌疑( 我手头就有一本几乎一模一样的英文书 ), 但是, 是他把这本入门手册引入中国, 使无数程序员了解了C语言, 我想他的功劳也是不可磨灭的. 在< C语言程序设计 >这本书中所有的例子都可以用做锻炼思路的基石, 他对大家的编程是很有帮助的. 我认为是值得一买的. 去思考课后的例子对你的编程很有帮助. 不要小看一个一个简单的例子, 他们是你通往成功的道路.

当你基本能够掌握了上一本书中例子后, 你就要自己找一些例子程序去看. 开始可能是看不懂, 但是只要努力就没有什么问题. 当你看过几个较大的例子之后, 你会茅塞顿开, ( 大量阅读例子程序是学习C/C++的捷径 ). 你会发现, 你的水平有了显著的提高. 你看的例子越多, 你对 Windows/DOS 了解的越多. 最好能够再看一些关于系统知识的书籍. 他会对你的编程很有帮助的.

这是我学习C/C++的一点心得, 希望对没有被我吓到而要继续学习C/C++的朋友们有一些帮助. 免得有些同志说我破坏中国软件人才的发展.

在最后我祝愿所有坚持学习C/C++的朋友们成功! 同时感谢阅读过我文章的同志们.

想学好C++,非学C不可!!!

今天我这么肯定的在这里讲这番话,是不想初学者陷入到语言越新越好的误区,本来这个题目就不是很严谨,但是我有几句话必须讲讲,为C平反!!

C++与C有什么不同呢?我们现在一步步地来分析一下
一、类,类我并不说它有什么不好,但是对于初学者,它是一个累赘。类的封装使得初学者对程序产生厌倦,感到不适和麻烦。
二、引用,引用是C++中最臭屁的东西了,最好尽量不要用它,我就是从来不用引用,除非万不得已。引用对于初学者就更容易产生混淆,不知道哪个是引用,哪个是变量。
三、函数的重载,初学者学函数的重载好像没什么坏处,但是,这会使初学者潜意识里对C语言的变量类型的重要性产生淡化,要记住C语言是对变量类型最敏感了的,变量的类型在C语言里的重要性是不言而喻的。
四、流操作符,和上面同样的道理,使得对变量类型的重要性产生淡化,况且,cin这个东东有点儿不怎么方便,有时会产生使初学者莫名其妙的结果。
五、操作符重载,典型的高级应用,初学者可能根本用不着,这个东东会让他们觉得C++很难,门槛高,看不懂…………。
六、继承,以及虚函数,典型的模仿四不象,这种狗屁东西除了看起来深奥,实用价值很低………………。我怎么可能把某个类的类型的指针去指向另一个不同类型但是是继承关系的类,来实现什么动态联编,晕…………
………………还有些东东我就不发表评论了,如:new,delete操作符等…………

七、误区:以问答形式:
问:C++是面向对象化的而C是面向过程化的?
答:第二对,第一问错,C++并非完全面向对象化,真正的面向对象化的语言恐怕只有Java才算得上。
问:C++能实现C所不能的功能吗?
答:至少我还没有发现……
问:学了C再学C++有障碍吗?比如程序设计思想……
答:至少我还没有看见谁有此症状。
问:学了C再学C++又要重头开始吗?
答:不,C++下可以实现C语言的一切功能。
问:我学完了C一定还要学C++才能编程吗?
答:完全没必要。
问:C++比C好在哪里?
答:更加符合软件工程学
问:学完了C再学C++是不是很容易?
答:那要看你是不是真正的学完了C语言,我从C到C++就一个星期的睡觉前的时间看两眼书,然后就大彻大悟。再跑到这里来发表些狗屁文章了。

最近在网上看到了很多人的学习方法,本人非常不赞同。很多人都想一口吃个胖子,要学就想学最新的,好象没有人愿意再去学那些老的,旧的编程语言了。但你们能学的懂吗?不学TC2。0等那些较早的优秀编程语言,你们能理解的了VC6。0?如果你真的能,我宁愿做你的徒弟!真是奇怪,那些最基本的语言都不懂的人,怎么可能去理解那些最新的编程语言?我学编程有三年了吧。成绩也不算多,只有一个计算机四级证和一个高程证,但我觉得我在学VC的时候还有很多的不明白的地方。没有人来教我,只能靠我自己,包括所有的成绩在内,我都是靠自己,我从不报班。学VC的半年多来,我想我已经基本入门,但依然有很多的困惑。刚开始学VC,就面临一个项目,我真的犹如笨蛋一般,四处吓摸,毫无头绪,最后勉勉强强才算做个差不多。学好VC再去学其他的高级WINDOWS编程,我想那真是轻而易举,毕竟WINDOWS的内部的很多东西都能直接被VC调用,你首先就可以对WINDOWS有个全新的认识,再去学其他的语言岂能不简单?

我的感觉是,面向过程和面向对象,其实都很重要的,在VC里也依然需要面向过程,很多东西都是一环扣一环,没有面向过程的思想,怎么可能去编程呢?建议多去看看有关WINDOWS编程的书,但多数都是比较老的书呦!我依然记得当年整天进行TC编程的辛苦,但我依然很怀念当年的劳动付出,毕竟我获得了我想获得的一切——编程思想。我觉得一个好的编程思想,绝对比你去学一门计算机语言好重要的多。要形成自己的编程风格。一个好的编程思想在你的头脑中一旦形成,学习什么语言都会很轻而易举,因为此时的你不在是简简单单的学习,而是来验证!

热心网友 时间:2022-03-31 06:35

指针是C语言只所以如此成功的重要原因之一,当然任何事物,往往都是一体两面的,本质上是一体,看上去是两面,关键是要活学活用,没比较过分的区别优点、缺点。


C语言主要是针对硬件及系统底层编程的,在针对硬件及系统底层编程中,对数据的灵活性要求较高,换句话说数据的意义需要经常变动,而数据类型决定了数据的意义,指针一个重要作用是实现对数据类型的转换,比如要将机器码为0x3f8ccccd表示成浮点数:

#include <stdio.h>
int main()
{
unsigned ui = 0x3f8ccccd;  
float f1 = (float) ui; //错误 ,转换的意义不正确
printf("%f\n", f1);
float f2 = *(float *)(&ui); //正确,通过指针改变内存数据的意义
printf("%f\n", f2);
return 0;
}

指针这种能改变数据上下文环境的能力是非常有用的, 比如检测CPU所支持的存储顺序。

#include <stdio.h>
char endian(void) 
{
unsigned ui = ~0 - 1;
return ((*(unsigned  char *)(&ui) == 0xfe) ? 'L' : 'B');
}
int main()
{
endian()=='L' ? printf("little endian cpu\n") : printf("big endian cpu\n");
return 0;
}

如果C语言没有指针,当然可以想出其它的方法,但是远没有指针方便。


指针的缺点,可能对于初学者来说 ,往往不容易理解,而且使用指针编程经常会出现一些莫名其妙的错误,而且在平时使用C语言进行应用程序开发时,好像指针真的不怎么有用,这些都不是问题,关键是看个人学习C语言的用处,做什么开发,上什么项目。

热心网友 时间:2022-03-31 08:26

内存对齐的缘故。
p_buf 作为一个指针,它的值是内存的某个字节的地址。
如果想要把 p_buf 强制转换成一个 unsigned int*类型的指针,
需要满足一个必要条件,就是 p_buf 的值必须能够被4整除。(之所以是4,是因为 unsigned int 是要占4个字节的)。

热心网友 时间:2022-03-31 10:34

说那么多干什么勒..
指针我觉得是画蛇添足..没有什么好与不好.
可的情况还是需要用指针,不过觉得不多.
表格列求和公式怎么设置 求和函数公式怎么输入 北京注册成立一个公司需要多少钱 北京公司都是什么 手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 嘴唇上有黑印用蜜蜡和棉线去除了胡须 软柿子的热量 孕妇可以吃软柿子吗不是西红柿 脆柿子和软柿子的区别 脆柿子好还是软柿子好 软柿子可以多吃吗 “鱼悬洁白振清风”的出处是哪里 用大自然的声音评课好吗? 妇产科博士找超声科工作容易吗 怎能把微信6.2.0版本换回6.1.2版 微信群6.2.4怎么增加人数上限 微信6.2.2如何备份手机通讯录 电脑桌面图标不能放大? 有什么好用的识图软件 识图认人哪个软件最好 手机识图软件什么软件能识别图片位置 小米手机自动锁屏时间怎么修改 小米手机屏幕锁定时间设置教程 能举起100斤算大力吗 中医美容专业是什么 中医美容证有什么用 单声道音频什么意思(开启单声道音频有什么好处) 单声道音频是什么,有什么用处? 户口还未迁移到婆家 娘家户口怎么就没了呢 我结婚没有迁户口,现在娘家也没有怎么办 没领证生的孩子一般会判给谁 没领证生的孩子会判给谁 信用卡卡种有哪些 找一首古风歌曲 男声 低配电脑装w10还是w7流畅 电脑配置低装win7还是win10好 低配电脑适合装WIN7系统还是WIN10系统? ...500s-15isk这个联想笔记本的内存条尺寸是什么型号的有没有知道的... 越快越好.怎样减肥.而且胸部不缩水 请问徐闻县海安长途汽车客运站客服是多少? 过了平台期还会瘦吗 悦耳的意思悦耳的解释 重庆师范大学应用心理学专业的权威性如何? 打印机laserjetm1136mfp怎样设置无线打印 经典电影赏析之1:《精武英雄》 海尔电视机老出现黑屏怎么办啊? 海尔电视黑屏有声音怎么修理遥控器 海尔电视黑屏如何处理 我家的海尔电视有声音没图像是怎么回事? 海尔液晶电视黑屏有声音 海尔统帅电视机黑屏但有声音,是怎么回事? 海尔电视出现黑屏怎么办 海尔液晶电视看得好好的突然黑屏,但是有视频声音,关机再打开看一会又黑屏,声音也正常!问是什么问题? 请问下 海尔电视黑屏有声音 关了打开就正常了 放一会儿 又黑屏 有声音 是怎么回事 屏幕坏了吗 海尔电视黑屏,声音正常,怎么办, 海尔电视黑屏打不开但还有声音是怎么回事 海尔电视黑屏有声音没图像怎么调? 海尔智能电视黑屏但有声音,怎么回事? 海尔电视黑屏有声音怎么修理 海尔电视有声音黑屏怎么办 海尔电视开机黑屏,有声音但没图像,怎么回事? 台州有什么特色风景点 微信中接龙怎么弄 手机上用什么软件可以在喜欢的图片上加上文字 怎么把安卓手机系统与联想电打印机,连在一起使用。 excel怎么筛选重复数据, excel怎么筛选重复数据 excel怎么自动筛选重复数据 电脑复制粘贴方法6种 OPPO Reno 怎么自己刷机? 手机进水了有什么方法处理? 手机进水怎么办 有什么好方法? 手机进水了,有什么轻松格外有效的处理方法? 手机进水了怎么办?有什么处理手机进水的方法? 手机进水了有啥好办法啊? 手机进水有什么可以恢复的办法吗? 手机进水有哪些方法可以补救 手机进水有什么办法恢复? 手机进水有什么办法 手机进水怎么办 有什么方法华为的? 手机进水了有什么办法解决吗? 手机进水了,有什么办法啊 手机进水了都有哪些解决方法? 怎么用电脑微信扫一扫 怎样用电脑qq扫描二维码访问
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com