c语言基本语法
表示符
用来标识变量,函数,或者其他用户自定义项目名称
关键字
break ,case , char ,if ,return等等
关键字
auto 自动所有的变量在数据类型前面都有个auto
break
case
char
const 修饰常属性变量
continue
default
do
double
else
enum
extern 声明外部符号
变量的声明
需要建立存储空间的
例如: int a 在声名的时候就已经建立了存储空间
不要要建立存储空间的
extern关键字声明变量名而不定义它 例如:extern int a 其中a可以在别的文件中定义。
float
for 写单片机语言时定义i时只能在循环体外部定义;
goto
int
long
register 寄存器
return
short
signed 有符号的
unsigned 无符号的
sizeof() 计算的是变量或类型所占空间的大小,单位是字节
static
修饰局部变量 时局部变量出了作用域不会被销毁。改变了变量的存储位置
修饰全局变量 时这个全局变量的外部连接属性就变成了内部链接属性
其他源文件就不能使用了.
修饰函数 时这个函数的外部连接属性就变成了内部链接属性
其他源文件就不能使用了.
struct
switch
typedef 类型起别名
例如:typedef unsigned int uint
union
unsigned
void
volatile
while
c语言中的空格,称之为空白行,c编译器会完全互留它
c数据类型
基本数据类型
char
1字节
int
2字节/4字节
整型
shout
2字节
短整型
long
4字节
长整型
float
4字节
单精度浮点型
浮点数
浮点数的四舍五入,不能用肉眼看到的数值来计算,因为浮点数在内存中有可能不能精确的保存
double
8字节
双精度浮点型
long double
16字节
枚举类型
用来定义在程序中只能赋予其一定的离散数值的变量
void
表明该数据类型没有返回值
派生类型
包括数组类型,指针类型和结构类型
类型转换
隐式类型转换
较小的数据类型转化为较大的数据类型;例如:int转为long/float转为double。隐式类型转换可能会导致数据精度丢失或截断
实例:int i =10;
float f = 4.1;
double = i + f;
显式数据类型
强制数据类型转换可以在必要时对数据类型进行更精准的控制,但也可能会数据丢失或截断
实例:double =2.13123;
int = (int)d;
全局变量的作用域是整个工程
常量
常量可以是任何基本数据类型,常量就是常规的变量,只不过常量的值再顶以后不能被修改
字面常量 就是自负床常量 直接写出来的数字
const 修饰的常量 不能被改变
#define 定义标识符常量
枚举常量 enum
枚举-一 一 列举
存储类
auto存储类
函数开始时被创建,函数结束时被销毁
auto int xx;
register存储类
register 存储类定义存储在寄存器,所以变量的访问速度更快,但是它不能直接取地址,因为它不是存储在 RAM 中的。在需要频繁访问的变量上使用 register 存储类可以提高程序的运行速度。
static存储类
可以在函数调用之间保持局部变量的值
extern存储类
函数
自定义函数:
返回值类型 函数名称(){
}
strlen() 求字符串长度
sizeof() 计算的是变量或类型所占空间的大小,单位是字节
宏
#define 宏名(x,y) ((x)+(y))
数组
数据类型 数组名[] 同一个数组存储的是相同元素的集合
赋值方式 例如:char a[10] ="hhello"
注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!
strcpy 赋值
char a[10]; strcpy(a,"hello");
c99之前数组种[] 若内部填写数则必须上常量
c99之后 放入变量则不能进行初始化
指针 例如: int* p = &a
1.存放指针(地址)的变量就是指针变量
2.int 说明指向的对对象是int类型的
3.*代表p是一个指针 变量
4.&取地址
例如:int 类型创建出来的变量占4个字节,取变量的地址时,咱们取得是第一个字节所占的地址
//不管是什么类型的指针,都是在创建指针变量
//指针变量使用来存放地址的
//指针变量的大小取决于一个地址存放的时候需要多大的空间
//32位机器上的地址:32bit位 - 4byte,所以指针变量的大小是4个字节
//64位机器上的地址:64bit位 - 8byte,所以指针变量的大小是8个字节
结构体
结构化
分支语句(选择结构)
二分查找
int main()
{
int k=7 ;
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int right = sizeof(arr)/sizeof(arr[0]);
int left = 0;
while(left<=right)
{
int mid = left + (right - left)/2;
if(k>arr[mid]){
left = mid +1;
}
if (k<arr[mid])
{
right = mid -1;
}
else{
printf("找到了,下表位%d",mid);
break;
}
}
return 0;
}