C语言
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
Mike江
A goal is not always meant to be reached, it often serves simply as something to aim at. ──Bruce Lee
目标不一定是需要达到的,目标往往只是用来帮助你瞄准方向。──李小龙
展开
-
《C和指针》:存储类型
存储类型变量的存储类型是指存储变量值的内存类型。变量的存储类型决定变量何时创建、何时销毁以及它的值将保持多久。有三个地方可以用于存在变量:普通内存、运行时堆栈、硬件寄存器。变量的缺省(默认)存储类型取决于它的声明位置。凡是在任何代码块之外声明的变量问题存储于静态内存中,也就是不属于堆栈的内存,这类变量称为静态变量。对于这类变量,你无法为它们指定其他存储类型。静态变量在程序运行之前创建,在程序的整个执转载 2017-04-11 14:26:58 · 1346 阅读 · 0 评论 -
《C陷阱与缺陷》:缓冲输出和内存分配
程序输出有两种方式:一种是即时处理方式,另一种是先暂存起来,然后再大块写入的方式,前者往往造成较高的系统负担。因此,C语言实现通常都允许程序员进行实际的写操作之前控制产生的输出数据量。这种控制能力一般是通过库函数 setbuf 实现的。如果 buf 是一个大小适当的字符数组,那么: setbuf(stdout,buf);语句将通知输入/输出库,所有写入到 stdout 的输出都应该使用 buf 作为翻译 2017-04-06 15:16:09 · 12628 阅读 · 0 评论 -
《C陷阱与缺陷》:更新顺序文件
许多系统中的标准输入/输出库都允许程序打开一个文件,同时进行写入和读出的操作:FILE * fp; fp = fopen(file, "r+"); 上面的例子代码打开了文件名由变量 file 指定的文件,对于存取权限的设定表明程序希望对这个文件进行输入和输出操作。编程者也许认为,程序一旦执行上述操作完毕,就可以自由地交错进行读出和写入操作。遗憾的是,事实总是难随人愿,为了保持与翻译 2017-04-06 15:02:59 · 1924 阅读 · 0 评论 -
《C陷阱与缺陷》:如何理解(*(void(*)())0)()?
有一次,一个程序员与我交谈一个问题。他当时正在编写一个独立运行于某种微处理器上的C程序。当计算机启动时,硬件将调用首地址为0位置的子例程。为了模拟开机启动时的情形,我们必须设计出一个C语句,以显式调用该子例程。经过一段时间的思考,我们最后得到的语句如下:(* ( void(*)() ) 0) ();像这样的表达式恐怕会令每个C程序员的内心都“不寒而栗”。然而,他们大可不必对此望而生畏,因为构造这类表转载 2017-04-04 10:38:25 · 21547 阅读 · 0 评论 -
C语言实现url的编码和解码
url提交信息为何要转码呢?因为url本身会有很多特殊字符。而提交的参数中如果再有特殊字符的话,url就不能区分哪些是参数内容,哪些是分隔符。尤其是unicode,gb18030,big5等多字节的编码,不知道里面会隐藏什么字节,因此必须全部转码。更多详情请看:《关于URL编码》本文代码为从PHP代码中修改而来,只保留了2个函数。字符’a’-‘z’,’A’-‘Z’,’0’-‘9’,’...转载 2017-01-07 18:19:20 · 15281 阅读 · 7 评论 -
C语言可变参数的使用
概要众所周知,C++支出函数重载,而C语言默认是不支持。但是,C语言可以通过可变参数实现类似函数重载的功能。如 Linux C 的open()函数,这个函数有2个版本。有一个可选的第三个参数时只需要文件可能被创建。第三个参数描述了使用新文件的权限设置。#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(con原创 2016-12-22 18:45:15 · 23231 阅读 · 0 评论 -
C语言中用户定义类型(typedef)的作用
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括基本数据类型(int,char等)和自定义的数据类型(struct等),但不能创建新类型。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。比如,写一个int型的变量,我们能从名字知道它大概的含义,但我们不能知道这个变量的属性是什么。有人会说,它是转载 2016-08-22 15:15:27 · 6091 阅读 · 0 评论 -
结构体字节对齐
原则1:数据成员的对齐规则(以最大的类型字节为单位)结构体(struct)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存放在offset为该数据成员大小的整数倍的地方(比如int在32位机器为4字节,则要从4的整数倍地址开始存储)原则2:结构体作为成员的对齐规则如果一个结构体B里嵌套另一个结构体A,还是以最大成员类型的字节对齐,但是结构体A存储起点为A内部最大成员整数倍的地方。原创 2016-05-09 20:02:52 · 29612 阅读 · 0 评论 -
#pragma once 与 #ifdef 的区别
当一个项目比较大时,往往都是分文件,这时候有可能不小心把同一个头文件 include 多次,或者头文件嵌套包含:a.h 中包含 b.h :#include "b.h"b.h 中包含 a.h:#include "a.h"main.c 中使用其中头文件:#include "a.h"int main(){ return 0;}编译上面的例子,会出现如下错误:为了避免同一个文件被includ原创 2016-03-01 11:01:59 · 4356 阅读 · 3 评论 -
C语言排序实例(选择、冒泡、插入、折半、快速)
C语言排序实例(选择、冒泡、插入、折半、快速):void select_sort(int *a, int n); //选择法排序void bubble_sort(int *a, int n); //冒泡法排序void insert_sort(int *a, int n); //插入法排序void shell_sort(int *a, int n); //折半排序(希尔排序)void quick_sort(int *a, int low, int high); //快速排序原创 2015-09-04 16:09:05 · 2437 阅读 · 0 评论 -
浅析为什么 char 类型的范围是 : -128~+127
在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗: -2^(n-1)~2^(n-1)-1 n为整型的内存占用位数,所以int类型32位 那么就是 -(2^31)~2^31 -1 即 -2147483648~2147483647。转载 2015-07-24 08:52:23 · 39037 阅读 · 2 评论 -
为什么要学习和使用 C 语言?
对于理工科学生来说,这个答案可能很简单,因为这是一门必修课。而对于程序员来说选择一门编程语言,在某种程度上,对职业生涯的发展会产生重大的影响,所以必须慎之又慎。那么,为什么要选择一门诞生了将近半个世纪的语言?本文不是老生常谈的废话,如:"C 语言是编程的基础"、"学好 C 语言,走遍天下都不怕"等等,本文力争详尽而又有理的回答这个问题,旨在成为最好的为什么要学习和使用 C 的文章。原创 2015-05-31 17:38:00 · 35056 阅读 · 7 评论 -
C语言入门学习——函数的使用
程序就像公司,公司是由部门组成的,这个部门就类似于C程序的函数。默认情况下,公司就是一个大部门( 只有一个部门的情况下 ),相当于C程序的main()函数。如果公司比较小( 程序比较小 ),因为任务少而简单,一个部门即可( main()函数 )胜任。但是,如果这个公司很大( 大型应用程序 ),任务多而杂,如果只是一个部门管理( 相当于没有部门,没有分工 ),我们可想而知,公司管理、运营起来会有多混乱,不是说这样不可以运营,只是这样不完美而已,如果根据公司要求分成一个个部门( 根据功能封装一个一个函数原创 2015-03-10 17:11:45 · 3316 阅读 · 0 评论 -
如何学好C语言
有人在酷壳的留言版上询问下面的问题:keep_walkerr请点击。 今天晚上我看到这篇文章:http://programmers.stackexchange.com/questions/62502/small-c-projects我也遇到了和提问的老外一样的问题:能给像遇到这样烦恼的程序员一点建议嘛?谢谢!我相信,这转载 2015-02-07 11:33:50 · 2780 阅读 · 0 评论 -
C语言与C++不得不说的那点事
说到C语言,就不得不说它的继承者——C++语言。众所周知,C++语言是在C语言的基础上,添加了面向对象、模板等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上,还是从运算符的数量和使用上,都非常相似,所以我们常常将这两门语言统称为“C/C++”。虽然因为天然的血缘关系,导致两者非常相似,就像父亲与儿子相貌相似一样,但是,父亲和儿子毕竟是两个不同的各自独立的个体,而C语言和C++语言也同样转载 2015-01-29 13:55:49 · 1918 阅读 · 2 评论