C语言中为什么要设计指针?

c_language 2006-04-20 08:53:44
如何客观评价指针的利弊。在程序语言中,指针是不是必须的?
还有一个问题:
程序语句的三种结构很好理解,显然它和“逻辑学”应该有一定的关系。那么函数呢?它的理论基础是什么?也就是为什么在程序设计语言中要引入“函数”。
类似的还有“宏定义”、“结构体”。它们各自的依据是什么,不可能是“无缘无故”的吧!
...全文
389 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2006-04-21
  • 打赏
  • 举报
回复
孔乙己还问那个回字有多少种写法呢

指针是c语言的最有特色的东西
是不是没有它就解决不了了某个具体的问题呢,不是的
只是有了它有了更多的可能性
zez 2006-04-21
  • 打赏
  • 举报
回复
楼主是学哲学的..
这年头,哲学家也来编程???

用的着钻牛角尖么??

计算机刚出来的时候没有函数,都是 用手打开关闭开关,后来用打孔的纸带.
后来有了汇编..
再后来才有了高级的语言..
再后来出来了c,出现了结构体,函数. 为什么有这些,因为这样方便,省事!!
LoveCreatesBeauty 2006-04-21
  • 打赏
  • 举报
回复
以前不是有位朋友提到过(当然在很多书本里也有),malloc系列函数分配的对象没有名字,必须用指针才能引用。用来回答这个问题,是不是有启发性?C是一个静态类型语言,通过malloc希勒函数可以获得一定在运行时的弹性,没有指针则不能获得这种动态性,或者即使获得也不能使用它。
TryBoYang 2006-04-21
  • 打赏
  • 举报
回复
看什么样的需要了。
在系统软件和嵌入式开发这样需要高效运行效率的领域,操作指针比其他的方法快很多。
面向对象语言的指针只是对程序员屏蔽掉而已,其语言内部还是有大量指针。
  • 打赏
  • 举报
回复
jixingzhong(瞌睡虫:选择了远方,只顾风雨兼程!) ( ) 信誉:102 2006-04-20 21:06:00 得分: 0


呵呵,
楼主可能有些过于狭隘了~

在 java 中没有指针,
也没有函数,
有的只是 类,方法 ....


————————————————————————————

在Java语言中虽然没有明确的指针定义,实质上每一个new语句返回的都是一个指针的引用
武稀松 2006-04-21
  • 打赏
  • 举报
回复
指针的历史非常悠久了,从Pascal开始就引入了指针的概念.
指针固然可能带来危险.但是指针直接访问内存却是设计底层和操作系统的必须.
所以高级语言设计操作系统只有两大据有指针的族系PASCAL(包含MODULE,ADA)和C(包含C,C++).
Pascal可以说是开创了现代高级语言的先河.它发扬光大了结构话设计,函数式语言.并且它引入的CASE语句、记录和指针等新概念一直使用到今天.Pascal之父的话"数据+算法=程序"也是现代设计开发的经典语言.
C在继承了Pascal有用的元素以后去掉了Pascal的呆板(也去掉了严谨和优雅的自然语言语法).
到今天几乎ALGOL家族统一了全部的开发语言.(C,Pascal是它的最大的两个后代).
语法都是一脉相承的.都是有用的.
c_language 2006-04-21
  • 打赏
  • 举报
回复
我只所以有这些问题,是想弄清楚技术背后的思想,因为我觉得只有弄清楚最本质的东西,才能以不变应万变.不管什么技术,它背后总有理论思想和原理.

为什么计算机要用CPU?
把我所知,这好象与冯诺依曼所提出的程序存储原理有关.

为什么我们买的电脑需要一个机箱?
这还用问吗?肯定是为了保护内部的元器件,同时还可以起到防止辐射的作用,加一个机箱还可以使计算机更美观,何乐而不为呢?


我有这样一个观点,不知对不对?
每一件事物的出现和引入都会有它的原因,不会无缘无故的出现.
lengsehuoyan 2006-04-21
  • 打赏
  • 举报
回复
管理内存
september_29 2006-04-21
  • 打赏
  • 举报
回复
为什么计算机要用CPU为什么,我们买的电脑需要一个机箱?
为什么??
swabc 2006-04-21
  • 打赏
  • 举报
回复
不讨论这么无聊的问题
Piboye 2006-04-21
  • 打赏
  • 举报
回复
指针其实是不能避免的问题,以我看到的语言来说,每种语言都有指针。
从汇编,C,C++到pascal,VB,Delphi,C#,Java,perl....
好多语言自称是没有指针,其实是换汤不换药,一样都有指针。
好多语言用句柄来代替C中的指针,可是你想想那不还是指针吗?
C中指针很多人都认为是指向内存地址的,其实在现代的计算机系统中,这些指针在大多数情况下也就是个程序逻辑地址,它要经过段变换和页变换才能找到真正的物理地址。
这些过程也涉及到查表,这和前面的句柄不是一样了吗。

C语言中指针之所以搂来非议,你因为C,C++中的指针都是row的,太原始了,限制太少,没有智能。
其它语言只是多加了指针的限制和智能化一点,后就改名了。
C++语言可以做的很好在指针的封装中。

所以说不是指针不好,而是要把指针用到位,该row就row,该smart就smart
adintr 2006-04-21
  • 打赏
  • 举报
回复
计算机为什么要设计内存?
hazuki9902 2006-04-21
  • 打赏
  • 举报
回复
如何客观评价指针的利弊。在程序语言中,指针是不是必须的?
---------------------------------------------------------]
本人愚顿,限于交流,所言可能不详.但是指针确实是C的精髓所在.
程序语言中,指针不是必须的.
用C指针可以直接访问内存单元,提供了最低层,最直接的操作,因此效率自然比其他高级语言优越
也正是由于可以直接访问内存单元的特点,如果程序中指针没有操作好(申请\初始化\偏移量操作\有效性检查),轻则造成运行失败,重至系统崩溃...
wind19 2006-04-21
  • 打赏
  • 举报
回复
指针是一个好东西,可以很方便得解决一些问题,只是比较难,看你的造诣了,其实java中也用到指针的原理的
megaboy 2006-04-21
  • 打赏
  • 举报
回复
如何客观评价指针的利弊。在程序语言中,指针是不是必须的?
------------------------------------------------------
从必要性来说的话,别说指针,即使其它东西也没有什么是必要的。一门语言之所以有这种或那种东西,基本取决于语言发明人是如何想的。

之所以要引入“函数”的概念,其渊源应该是数学思想,与计算机无关。
rickerliang 2006-04-21
  • 打赏
  • 举报
回复
函数是程序设计思维的一次很大的飞跃,其中心思想就是把变化的东西封装起来
逸学堂 2006-04-21
  • 打赏
  • 举报
回复
研究一下CPU的构成,就知道指针的用处了。

BTW:CPU通过地址总线获取地址,在通过数据总线读取数据。
这典型是一个指针调用。所以说语言中没有指针,那么首先先从硬件上
取消指针调用。
jixingzhong 2006-04-20
  • 打赏
  • 举报
回复
楼主可以去了解一些 计算机语言的 发展历程 ...
jixingzhong 2006-04-20
  • 打赏
  • 举报
回复
呵呵,
楼主可能有些过于狭隘了~

在 java 中没有指针,
也没有函数,
有的只是 类,方法 ....
gjianpro 2006-04-20
  • 打赏
  • 举报
回复
和计算机硬件结构有关,没有指针就不叫C语言了
加载更多回复(1)
1. C 语言指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++指针和引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C可变参数函数实现 38 8. C程序内存组成部分 41 9. C编程拾粹 42 10. C语言实现数组的动态增长 44 11. C语言的位运算 46 12. 浮点数的存储格式: 50 13. 位域 58 14. C语言函数二维数组传递方法 64 15. C语言复杂表达式的执行步骤 66 16. C语言字符串函数大全 68 17. C语言宏定义技巧 89 18. C语言实现动态数组 100 19. C语言笔试-运算符和表达式 104 20. C语言编程准则之稳定篇 107 21. C语言编程常见问题分析 108 22. C语言编程易犯毛病集合 112 23. C语言缺陷与陷阱(笔记) 119 24. C语言防止缓冲区溢出方法 126 25. C语言高效编程秘籍 128 26. C运算符优先级口诀 133 27. do/while(0)的妙用 134 28. exit()和return()的区别 140 29. exit子程序终止函数与return的差别 141 30. extern与static存储空间矛盾 145 31. PC-Lint与C\C++代码质量 147 32. spirntf函数使用大全 158 33. 二叉树的数据结构 167 34. 位运算应用口诀和实例 170 35. 内存对齐与ANSI Cstruct内存布局 173 36. 冒泡和选择排序实现 180 37. 函数指针数组与返回数组指针的函数 186 38. 右左法则- 复杂指针解析 189 39. 回车和换行的区别 192 40. 堆和堆栈的区别 194 41. 堆和堆栈的区别 198 42. 如何写出专业的C头文件 202 43. 打造最快的Hash表 207 44. 指针与数组学习笔记 222 45. 数组不是指针 224 46. 标准C字符串分割的方法 228 47. 汉诺塔源码 231 48. 洗牌算法 234 49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. 连连看AI算法 274 56. 连连看寻路算法的思路 283 57. 重新认识:指向函数的指针 288 58. 链表的源码 291 59. 高质量的子程序 295 60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66. 关于指向指针指针 368 67. C/C++ 误区一:void main() 373 68. C/C++ 误区二:fflush(stdin) 376 69. C/C++ 误区三:强制转换 malloc() 的返回值 380 70. C/C++ 误区四:char c = getchar(); 381 71. C/C++ 误区五:检查 new 的返回值 383 72. C 是 C++ 的子集吗? 384 73. C和C++的区别是什么? 387 74. 无条件循环 388 75. 产生随机数的方法 389 76. 顺序表及其操作 390 77. 单链表的实现及其操作 391 78. 双向链表 395 79. 程序员数据结构笔记 399 80. Hashtable和HashMap的区别 408 81. hash 表学习笔记 410 82. C程序设计常用算法源代码 412 83. C语言有头结点链表的经典实现 419 84. C语言惠通面试题 428 85. C语言常用宏定义 450

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧