數據類型
獲取int的字節數大小方法
printf("int bytes:%d",sizeof(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> void main(){ char min=-128-1; char max=127+1; printf("min-1=%d \r\n",min); //輸出: 127 printf("max+1=%d \r\n",max); //輸出: -128 }
進制
int i=99; /* 十進制 */ int i=07; /* 八進制 */ int i=0x04; /* 十六進制 */ unsigned int i=60u; /* 無符號整數 */ long int i=60l; /* 長整數 */ unsigned long int i=60ul; /* 無符號長整數 */
靜態變量與函數
只用於本文件(當前點C文件)的變量或函數要全部使用static關鍵字聲明
靜態變量
0、靜態全局變量僅對當前文件可見,其他文件不可訪問,其他文件可以定義與其同名的變量,兩者互不影響,不可用extern實現誇文件訪問
1、靜態變量會自動賦有初值0,而普通變量編譯器不會自動賦初值
2、局部靜態變量放置在數據區,所以不會因函數的消失而死亡,但寄生於函數之上。全局靜態變量與全局變量類似。
3、靜態變量重復定義時,局部靜態變量優先級高,但只作用於局部
#include<stdio.h> static int i;//全局靜態變量 void fun1(){ static int i;//局部靜態變量 printf("%d\r\n",i);//0-9(局部) i++; } void main(){ int x; for(x=0;x<10;x++) fun1(); printf("---%d\r\n",i);//0(全局) }
靜態函數
0、在函數的返回類型前加上static,就是靜態函數
1、靜態函數只能在聲明它的文件中可見,其他文件不能引用該函數
2、不同的文件可以使用相同名字的靜態函數,互不影響
枚舉
enum Ex{ D0,D1,D2,D3 //0,1,2,3 }; enum Ex{ D0=100,D1,D2,D3 //100,101,102,103 }ee; enum Ex{ D0,D1=200,D2,D3 //0,200,201,202 }ee;
printf("%d\r\n",D2);
結構體
聲明
方法1:
struct 結構體名 { 成員列表 }; struct 結構體名 變量1,變量2;
方法2
struct 結構體名 { 成員列表 }變量1,變量2;
方法3
struct { 成員列表 }變量1,變量2;
方法4
typedef struct { 成員列表; }結構體別名; 結構體別名 變量1,變量2;
初始化
方法1
struct { 成員列表 }變量1={成員1值,成員2值,成員3值……};
方法2
memset(&結構體變量名,0,sizeof(結構體變量名)); //將所有全部變量清零
引用(使用)成員:
結構體變量
struct 結構體名 變量1,變量2; 變量1.成員名
結構體指針變量
struct 結構體名 *變量1; 變量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的使用
宏定義常量
#define DONG '2' //字符 #define DONG "is str" //字符串 #define DONG 12 //數字 #define DONG 13.36 //浮點數
宏定義范圍
#define P 123 …… #undef P
typedef的使用
宏定義之類型重命名
typedef unsigned char u8;
宏定義之類型重命名對比
#include<stdio.h> #define ch1 char* typedef char* ch2; void main(){ ch1 a,b;//char *a,b; ch2 c,d;//char *c,*d; //輸出: --8,1,8,8-- printf("--%d,%d,%d,%d--",sizeof(a),sizeof(b),sizeof(c),sizeof(d)); }
帶參數的宏定義
#include<stdio.h> #define Max(x,y) ((x>y)?x:y) #define Add(x,y) (x+y); void main(){ int i=Max(10,2); int ii=Add(2,1) //此處無分號 printf("max:%d,add:%d",i,ii);//max:10,add:3 }
參考:
https://blog.csdn.net/xlh006/article/details/81540703
https://blog.csdn.net/kuniqiw/article/details/84495732
