-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------
C程序入口main函数;
1. 编写代码
2. 编译:把c语言代码编译成0和1
工具:clang编译器(Xcode3 gcc Xcode4 llvm(clang))
指令:cc –c 文件名.c(生产.o文件)
3. 链接:将.o文件和系统自带函数库合并生成可执行文件
指令:cc 文件名.o(生产可执行文件a.out)
4. 运行
指令:./文件名
注意:cc 文件名.c –o xxx(编译链接一起,生产可执行文件xxx)
注释:
1. 单行注释:从//开始到这行结尾
2. 多行注释:以结尾,中间都是注释
注释作用:
1. 不参与编译
2. 检查代码作用
3. 排除错误
数据
1. 静态数据:指一些永久数据
2. 动态数据:指在程序运行过程中,动态产生的临时数据
c语言数据类型:
1. 基本数据类型:整形int、单精度浮点型float、双精度浮点型double、字符型char
2. 指针类型:void *
3. 构造类型:结构体struct、共用体union、枚举enum
4. 空类型:void
内存分析:
1. 内存寻址是由大到小的,优先分配内存地址比较大的字节给变量
2. 变量越先定义,内存地址越大
3. 取得变量的地址:&变量名
4. 输出地址:%p
5. 一个变量一定要先进行初始化,才能使用
运算符:
算术运算符:+、-、*、/、自加、自减、sizeof
关系运算符:>、<、>=、<=、==、!=
逻辑运算符:&&、 ||、!
三目运算符:条件 ? 数值1 : 数值2
流程控制:
1. 顺序结构:默认
2. 选择结构:条件成立执行
3. 循环结构:在一定条件下,反复执行
选择结构:if
1. if(条件) {语句;}
2. if(条件) {语句;}else{语句;}
3. if(条件) {语句;}else if(条件){语句;}else{语句;}
4. if(条件) 语句;
选择结构:switch
switch (数值)
{
case 数值1:
语句1;
break;
case 数值2:
语句2;
break;
default:
语句3;
break;
}
如果在case里面定义新变量,必须使用大括号{}
循环结构:
1. while(条件) {语句;}
2. do {语句;} while(条件);
3. for (语句1; 条件; 语句2) {语句3;}
continue; // 跳过本次循环,进入下一次循环
break; // 跳出循环,不再进行循环
函数声明:返回值类型函数名(参数类型参数名);
函数定义:返回值类型函数名(参数类型参数名)
{
语句;
}
实参:调用函数时传入的数据
形参:函数内部保存传入数据的变量
注意:
1. 默认情况下,不允许有函数名称一样
2. 函数不能嵌套定义
3. 函数不能重复定义,但可以重复声明
4. 函数只声明不定义,可以通过编译,但是无法通过链接
include:拷贝文件所有内容到当前位置,<>表示从系统默认位置查找,””表示从用户当前路径查找
进制:十进制、二进制、八进制、十六进制
1. 默认情况下是十进制
2. 0b/0B开头表示二进制
3. 0开头表示八进制
4. 0x/0X开头表示十六进制
%d\%i 以10进制整数形式输出数值
%c 输出字符
%p 输出地址
%f 输出小数
%o 八进制形式输出整数
%x 十六进制形式输出整数
内存存储细节:
int number = 12; // 0000 0000 0000 00000000 0000 0000 1100
地址 | 变量 | 内容 |
Ff00 | number | 0000 1100 |
Ff01 | 0000 0000 | |
Ff02 | 0000 0000 | |
Ff03 | 0000 0000 | |
Ff04 |
1. 按位与&:与0为0,与1保持原位
2. 按位或|:或0保持原位,或1为1
3. 按位异或^:相同为0,不同为1
4. 按位取反~:0取反1,1取反0
5. 左移<<:高位丢弃,低位补0
6. 右移>>:低位丢弃,高位补符号位
数组:类型数组名[元素个数];
数组作为函数参数会退化为地址
二维数组:类型数组名[数组个数][元素个数];
指针:类型 *变量名;
指向指针的指针:类型 **变量名;
局部变量:在函数(代码块)内部定义的变量;从定义变量哪一行开始分配空间,一直到代码块结束被回收;没有初始值
全局变量:在函数外定义的变量;程序一启动就会分配空间,程序退出时才会被销毁;默认初始值为0;
结构体:可以由多个不同类型的数据构成
定义结构体类型时并不会分配存储空间;定义结构体变量时才真正分配空间;
指向结构体指针:struct Student *stu;
利用指针访问结构体成员:(*stu).成员名称;stu->成员名称;
枚举enum:变量只具有固定的值
预处理指令:在代码被翻译成0和1之前进行的动作;所有预处理指令都是以#开头
1. 宏定义:
#define SUM(a, b) ((a) + (b))
#define COUNT 5
2. 条件编译
#ifndef AAA
#define AAA
#if defined(AAA)
#endif
#endif
3. 文件包含
#include <stdio.h>
#include “aaa.h”
typedef关键字:
typedef int MyInt;
typedef char * String;
typedef struct Student {
int age;
int no;
} Student;
typedef int (*SUM)(int a, int b);
static关键字和extern关键字
修饰函数:
1. static修饰定义内部函数,其他文件无法访问;
2. extern修饰定义外部函数,其他文件可以访问,默认情况下所有函数是外部函数
修饰全局变量:
1. static修饰定义内部变量,其他文件无法访问
2. extern修饰定义外部变量,其他文件无法访问;默认情况下所有全局变量都是外部变量
修饰局部变量:
1. static修饰局部变量,所有调到同一函数都共享这个变量,作用域没有变化,但是生命周期到程序结束才被销毁;
递归的2个条件:
1. 函数自己调用自己
2. 必须有明确的终止条件
-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------