文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C语言(一)

C语言(一)

时间:2011-04-29  来源:LuckyBool

学了这么久,突然觉得自己对C语言一点都没有掌握。这段时间抓紧看看C语言的基础问题。

加油!↖(^ω^)↗

觉得维基百科对C语言的介绍挺全面,并且也学到些东西。 链接:http://zh.wikipedia.org/wiki/C语言#.E5.86.85.E5.AD.98.E7.AE.A1.E7.90.86

1. 学了这么久,是否有想过C语言的特色到底有哪些。

  • C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。
  • 传递参数是以值传递(Pass-by-value),也可以通过指针来传递参数(Pass-by-address)。
  • 不同的变量类型可以用结构体(struct)组合在一起。
  • 只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。
  • 部份的变量类型可以转换,例如整型和字符型变量。
  • 通过指针(pointer),C语言可以容易的对存储器进行低级控制。
  • 编译预处理(preprocessor)让C语言的编译更具有弹性。

  这些特色只有在不断的代码中去领悟、体会。

2. 内存管理

  • C语言的特色之一是:程序员必须亲自处理内存的分配细节。
  • C语言使用栈(Stack)来保存函数返回地址/栈祯基址、完成函数的参数传递和函数局部变量的存储。 如果程序需要在运行的过程中动态分配内存,可以利用堆(Heap)来实现。
  • 基本上C程序的元素存储在内存的时候有3种分配策略:
    静态分配
    如果一个变量声明为全局变量或者是函数的静态变量,这个变量的存储将使用静态分配方式。静态分配的内存一般会被编译器放在数据段或代码段来存储,具体取决于实现。这样做的前提是,在编译时就必须确定变量的大小。 以 IA32 的 x86 平台及 gcc 编译器为例,全局及静态变量放在数据段的低端;全局及静态常量放在代码段的高端。
    自动分配
    函数的自动局部变量应该随着函数的返回会自动释放(失效),这个要求在一般的体系中都是利用栈(Stack)来满足的。相比于静态分配,这时候,就不必绝对要求这个变量在编译时就必须确定变量的大小,运行时才决定也不迟,但是C89仍然要求在编译时就要确定,而C99放松了这个限制。但无论是C89还是C99,都不允许一个已经分配的自动变量运行时改变大小。
    所以说C函数永远不应该返回一个局部变量的地址。
    要指出的是,自动分配也属于动态分配,甚至可以用alloca函数来像分配堆(Heap)一样进行分配,而且释放是自动的。
    动态分配
    还有一种更加特殊的情况,变量的大小在运行时有可能改变,或者虽然单个变量大小不变,变量的数目却有很大弹性,不能静态分配或者自动分配,这时候可以使用堆(Heap)来满足要求。ANSI C 定义的堆操作函数是malloc、calloc、realloc和free。
    使用堆(Heap)内存将带来额外的开销和风险。  

3.安全问题

  C语言的特色之一是:语言不负责内存边界检查。

 以上是摘自维基百科让我觉得有些收获的内容。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载