数据类型
printf("int bytes:%d",sizeof(@H_404_16@int));
列表整理
Int 与 long int的区别
早期的C平台是16位int系统,int用二字节表示,范围是-32768~+32767;long是long int的简写,用4字节表示,范围是-2147483648~+2147483647。显然在早期平台下long能表示的整数范围要比int大得多。而时下的平台流行的是32位int系统,即4字节系统,int与long在这样的系统下已经没有区别了,它们都是4字节带符号整数,表数范围都是-2147483648~+2147483647。
数据溢出
当变量大于类型的最大值或者小于类型的最小值时,该变量的值会进行跳转,如最大值加一则是最小值。
#include<stdio.h> @H_404_16@void@H_404_16@ main(){ @H_404_16@char min=-128-1@H_404_16@; @H_404_16@char max=127+; printf(min-1=%d \r\n404_16@//@H_404_16@输出: 127 printf(max+1=%d \r\n404_16@输出: -128 }
进制
@H_404_16@int i=99; @H_404_16@/*@H_404_16@ 十进制 @H_404_16@*/ @H_404_16@07; @H_404_16@ 八进制 @H_404_16@0x04; @H_404_16@ 十六进制 @H_404_16@*/@H_404_16@ unsigned @H_404_16@60u; @H_404_16@ 无符号整数 @H_404_16@long @H_404_16@60l; @H_404_16@ 长整数 @H_404_16@60ul; @H_404_16@ 无符号长整数 @H_404_16@*/
静态变量与函数
只用于本文件(当前点C文件)的变量或函数要全部使用static关键字声明
静态变量
0、静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响,不可用extern实现夸文件访问
1、静态变量会自动赋有初值0,而普通变量编译器不会自动赋初值
2、局部静态变量放置在数据区,所以不会因函数的消失而死亡,但寄生于函数之上。全局静态变量与全局变量类似。
3、静态变量重复定义时,局部静态变量优先级高,但只作用于局部
#include<stdio.h> @H_404_16@static @H_404_16@int i;@H_404_16@全局静态变量 @H_404_16@ fun1(){ @H_404_16@局部静态变量 printf(%d\r\n404_16@0-9(局部) i++@H_404_16@; } @H_404_16@ main(){ @H_404_16@int@H_404_16@ x; @H_404_16@for(x=0;x<10;x++@H_404_16@) fun1(); printf(---%d\r\n0(全局) }
静态函数
1、静态函数只能在声明它的文件中可见,其他文件不能引用该函数
枚举
@H_404_16@enum@H_404_16@ Ex{ D0,D1,D2,D3 @H_404_16@0,1,2,3 @H_404_16@}; @H_404_16@ Ex{ D0=100,D3 @H_404_16@100,101,102,103 @H_404_16@}ee; 200,200,201,202 }ee;
printf("%d\r\n",D2);
结构体
声明
方法1:
方法2
@H_404_16@ 结构体名 { 成员列表 }变量1,变量2;
方法3
@H_404_16@ { 成员列表 }变量1,变量2;
方法4
typedef @H_404_16@ { 成员列表; }结构体别名; 结构体别名 变量1,变量2;
初始化
方法1
@H_404_16@ { 成员列表 }变量1={成员1值,成员2值,成员3值……};
方法2
memset(&结构体变量名,0,1)">sizeof(结构体变量名)); @H_404_16@将所有全部变量清零
引用(使用)成员:
结构体变量
@H_404_16@ 结构体名 变量1,变量2; 变量1.成员名
结构体指针变量
C文件间共享变量
extern
extern是计算机语言中的一个关键字,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。
可以经extern写在头文件中,变量的定义写在任意一个点C文件(如main.c)中,此后只要包含该头文件夹即可实现变量的共享使用
举个栗子:
C1.h,声明函数c1fun()
#ifndef _C1_H_
#define _C1_H_
void c1fun(char *strx);
#endif
C1.c,实现函数c1fun()
#include<stdio.h> #include"c1.h" char *wu; void c1fun(char *strx){ wu=strx; }
Main.c,调用函数c1fun(),并读取外部变量wu的值
#include <stdio.h> #include "c1.h" extern char *wu; void main(){ c1fun("123456"); printf("===:%s",wu);//输出:123456 }
#define
针对不改变的量,可以在头文件中声明,在其他c文件中包含即可使用
如c1.h中:
#define DONG "dongxiaodong"
Mian.c中:
#include"c1.h"
……
printf("===:%s",DONG);
……
宏定义的使用
#define的使用
宏定义常量
@H_404_16@#define DONG '2' @H_404_16@字符 @H_404_16@#define DONG "is str" @H_404_16@字符串 @H_404_16@#define DONG 12 @H_404_16@数字 @H_404_16@#define DONG 13.36 @H_404_16@浮点数
宏定义范围
typedef的使用
宏定义之类型重命名
typedef unsigned @H_404_16@char u8;
宏定义之类型重命名对比
#include<stdio.h> @H_404_16@#define ch1 char*@H_404_16@ typedef @H_404_16@char*@H_404_16@ ch2; @H_404_16@ main(){ ch1 a,b;@H_404_16@char *a,b; ch2 c,d;@H_404_16@char *c,*d; @H_404_16@输出: --8,8,8-- printf(--%d,%d,%d--sizeof(a),1)">sizeof(b),1)">sizeof(c),1)">sizeof@H_404_16@(d)); }
带参数的宏定义
#include<stdio.h> @H_404_16@#define Max(x,y) ((x>y)?x:y) @H_404_16@#define Add(x,y) (x+y); @H_404_16@ main(){ @H_404_16@int i=Max(10,1)">2@H_404_16@); @H_404_16@int ii=Add(2,1)">1) @H_404_16@此处无分号 @H_404_16@ printf(max:%d,add:%d404_16@max:10,add:3 }
参考:
https://blog.csdn.net/xlh006/article/details/81540703
https://blog.csdn.net/kuniqiw/article/details/84495732