C语言总结1

函数大体上分为内联函数和非内联的普通函数(不写原型直接在main函数上方定义,即使不加’inline’关键字,也能被编译器默认为内联函数),普通函数正确的形式应该为声明与定义分离
函数的另一种分类是,有返回值和无返回值,返回值的类型可以是内建(build-in)的也可以是自己定义的(struct, union之类),无返回值则是void
main函数的返回值看似无用,实际上是由操作系统接收,在Windows操作系统下也许无甚”大碍”(实际上有),当你使用Linux的过程中你会清晰的发现一个C语言程序的main返回值关系到一个系统是否能正常,高效的运行,这里稍微提一句,0在Linux程序管道通信间代表着无错可行的意思。所以请扔掉void main这种写法。

main()这种省略返回值的写法:在C语言中,如果一个函数不显式声明自己的返回值,那么会被缺省认为是int,但这一步是由编译器掌控,然而C语言设计之初便是让我们对一切尽可能的掌握,而一切不确定因子我们都不应该让它存在。其次有一个原则,能自己做的就不要让编译器做。

C++并不支持void*隐式转换为其他类型的指针,但是C语言允许。还有许许多多C于C++不相同的地方,兴许有人说C++是C的超集,但我并不这么认为,一门语言的出现便有它的意义所在,关键在于我们如何发挥它的最大优势,而不是通过混淆概念来增强实用性

指针变量,是一种比较特别的变量,以至于总是对它进行特别对待。这里有几个原则:
两个不相关的指针进行加减操作是无意义的
始终确保自己能够找到分配的内存
无论何时何地何种情况,都要记住,不使用未初始化的指针,不让未使用的内存持续存在。
指针在不同位的操作系统上的大小是不一样的,但是在同一个操作系统下,无论什么类型的指针都是相同大小,这涉及到指针的寻址问题。对于大部分使用者来说,指针主要用来降低内存消耗以及提高运算效率的

变量限定
const 是最常用的变量限定符,它的意思是告诉编译器,这个变量或者对象在初始化以后不能被改变,常用它来保护一些必要的返回值,参数以及常量的定义。
volatile 这个关键字常常被C语言教材所忽略,它很神秘。实际上确实如此,他的作用的确很神秘:一旦使用了,就是告诉编译器,即使这个变量没有被使用或修改其他内存单元,它的值也可能发生变化。通俗的说就是,告诉编译器,不要把你的那一套优化策略用在我身上。

变量说明
extern 用于将不同文件的,带有外部链接性的变量引用到本文件中。所谓外部链接性就是可以被除本文件外的其他文件”看见”的变量,如全局变量。

变量获取
格式化输入输出在C语言的初学中使用的比较频繁,但是到后期会发现,由于I/O操作过于消耗资源,换句话来说就是会极大影响程序的执行效率,会渐渐的在发行版程序中消除。
常见格式化输入标准函数: sacnf, fscanf, sscanf
有两种比较不常见的格式:%[]%*
前者是用于限制读取类型,常见于字符串的过滤(不是真正的过滤)

        scanf("%d %[a-z]", &tmp, str);
        scanf("%d %[^i]", &tmp, str);
        scanf("%d %[^,]", &tmp, str);

假设输入的是:22 hello,string to me!
读取到的分别为:22 hello 和 22 hello,str 和 22 hello
后者则是忽略第一个输入:

  scanf("%*d %d", &tmp);

假设输入的是:22 33
读取到的则是:33
其中开头的%*d忽略的输入,必须和其类型匹配,例如输入:string 33则会读取失败。

也可以将其解读为文件宽度,例如在使用printf格式化输出的时候:

    char str[10] = "dir";
    printf("%*s%s",4 ,"" , str);
    /* 输出:    dir */ 四个空白占位   

但是实际上scanf并不太好用,所谓的好用指的是功能上以及设计上的缺陷,总是让很多人摸不着头脑的出了错,往往很难调试。例如它会将每一行输入的\n保留在输入流里面,这个缺陷导致如果不明所以得人将其与其他的输入函数,例如fgets或者gets配合会出现差错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值