本文通过菜鸟教程、《C程序设计》课本以及课件对C语言难点进行复习梳理
C语言知识点大概梳理图
首先,C++、Java和Python都是面向对象的编程语言,也都是强类型语言。
C++更接近于底层,方便直接操作内存。C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
来源于C,C是一种面向过程的语言。由于C++源于C,它良好的兼容了C功能,完全支持C,因此既可以面向对象、也可以面向过程。近几年又在此基础上发展出C#,C#使用起来更类似于Java。
C++和C中都有指针的概念,C++还可以使用智能指针,boost库。指针可以理解为一个地址,可以由程序员使用指针直接拿到该地址的数据,但是由于指针在使用的过程中,如果没有处理好,容易出现空指针和野指针,带来一些麻烦,因此Java去掉了指针的功能,规避了指针使用中可能存在的混乱情况。Java在C++的基础上又做了更高级的封装,具有良好的平台间的可移植性。C++一次编写到处编译,而Java一次编译到处运行。Java中的功能C++都能够实现,只是相对来说在编程方面会比较复杂一些。
C++ 编译成本地机器码, 可以由操作系统直接运行,运行效率较高。
Java 编译成字节码,需由Java虚拟机读取运行, 所以效率偏低,但可通过JIT提高运行效率。
垃圾回收方面,C++需要程序员自己回收,对内存进行良好的管理,而Java则不需要程序员自己完成这个工作,有自己的垃圾回收机制。
各种语言的基本语法都是相似的,比如int、float、double、bool等基本数据类型。
但是实现起来肯定是不同,比如C++把声明和实现分别放在头文件和源文件中,而Java则不使用头文件。C++引用其他内容时需要include,而Java则用package和import。这些都是细节的差别,但都是最基础的内容。
Java还可以应用到Android开发和JSP开发中。Java可以用来编写Android的应用程序,C#也可以。JSP则是用Java来做网站的。
Python是一种脚本语言,面向对象的思想个人认为体现的不是很明显。它更适合用来做算法。Python简单易学,对于新手来讲是编程入门的好选择。Python其实也是基于C++创造的,它们的区别主要体现在,C++效率高,编程难;Python效率低,编程简单。比如同样的事情,Python程序员可以很快的写出代码,但机器运行却可能需要成倍于C++的时间;反之,C++程序员编程实现的难度比较大,但在机器上的运行效率很高。因此,很多公司在核心的功能、需要大量运行的部分更倾向于选择C++,而在执行次数不多,但对写代码速度要求比较高的部分则更倾向于使用Python。
取长度运算符
逗号右边表达式的值为整个逗号表达式的值
//C语言默认的函数调用时实参的求值顺序是自右向左。
int i=1,j=2;
printf("%d,%d,%d\n",i+j,j++,i++);
//运行结果:5,2,1
标准库名称 | 头文件名 | 标准库名称 | 头文件名 |
---|---|---|---|
断言验证 | 复数算术运算 | ||
字符类型 | 出错码 | ||
浮点环境 | 浮点常量 | ||
整型格式转换 | 替代记号 | ||
整型大小 | 本地化 | ||
数学 | 时间日期 | ||
信号量处理 | 可变参数 | ||
布尔类型 | 标准定义 | ||
整型类型 | 标准输入输出 | ||
实用函数 | 字符串 |
在编译时将被调函数的代码直接嵌入到主调函数中,取消调用这个环节。
inline 返回类型 函数名(形参列表)
{
函数体
}
//或者在函数原型的类型前加上inline
inline 返回类型 函数名(形参列表);
优缺点:
若全局变量p定义点之前的函数f1想引用p,可以在函 数f1内做外部变量说明,使p的有效范围扩展到f1中。
f1(int a)
{ extern int p;
if(p>a) …; p有效
}
int p, q;
全局变量可采用static标识,只允许本文件中函数引用 ;不标识,允许本源文件中的函数及其它源文件中的 函数引用;但要求在其它源文件作外部变量声明。
#include "文件名"
#include <文件名>
//" "先在当前目录查找指定的文件,未找到再沿系统的设置(INCLUDE路径)查找;
//<>仅在系统的设置中查找;
避免重复包含的方法
#if !defined(_FILE)
define _FILE
#endif
在文件第一行增加该命令,意思是:在编译一个源文件时,只对该文件包含(打开)一次。
#ifndef ABCD_H
#define ABCD_H
// ... some declaration codes
#endif // #ifndef ABCD_H
多维数组作为函数的参数,形参数组第1维可以与实 参相同,也可以不相同;可以是任意长度,也可以不 写长度;但其他维的长度需要相同。
int a[5][10]
f(a);
void f(int A[5][10]); //正确
void f(int A[2][10]); //正确
void f(int A[][10]); //正确
void f(int A[][]); //错误,第2维长度必须给出
void f(int A[5][5]); //错误,第2维长度必须相同
void f(int A[50]); //错误,必须是二维数组
C语言没有提供字符串类型,对于字符串的处理是用字符数组来实现的。
字符串:
定义:C语言规定字符串是以’\0’(ASCII值为0)字符作为 结束符的字符数组,其中’\0’字符称为空字符( NULL字符)或零字符(Z字符)。
初始化:
char s[12]={"Hello World"}; //数组长度为字符串长度加1
char s[12]="Hello World"; //字符串初始化
char s[]="Hello World"; //字符串初始化
相当于:
char s[]={‘H’,‘e’,‘l’,‘l’,‘o’,‘ ’,'W','o','r','l','d','\0'};
但char s[4]={‘J’,‘a’,‘v’,‘a’};不能算字符串
int a[3][4];
a+i*列长*元素类型长
; 其中:i为行位移量;int a[10];
用指向函数的指针变量调用函数
指向函数的指针变量的定义
指向函数的指针变量的赋值
利用指向函数的指针变量调用函数 (*指针变量名)(实参表); 指针变量名(实参表);
#include
int max(int a, int b) //求最大值
{
return a>b ? a:b ;
}
int min(int a, int b) //求最小值
{
return a
[1] :https://www.zhihu.com/question/21976478/answer/158145376