C语言常用语法整理

标识符->
字母、数字、下划线组成
第一个字符必须是字母和数字
无法使用关键字
无硬性规定标识符的长度,建议8字符以内
区分大小写

#define PI=3.1415926535897	/*此处为宏定义

#include <stdio.h>		/*预编译处理

数据类型->基本类型->整型int->有符号基本整型int 4byte
->有符号短整型short/short int 2byte
->有符号长整型long/long int 4byte
->无符号基本整型unsigned int 4byte
->无符号短整型unsigned short (int) 2byte
->无符号长整型unsigned long (int) 4byte
->字符型char ‘ ’ “ ”(字符串)
->浮点数(实型)->单精度 float 4byte
->双精度 double 8byte
->长双精度 long double
->指针
->枚举-----------------------------------------?
->空NULL
->构造类型->数组
->结构体
->共用体

关于, exp:m=1,n=2;
a=(m+n,m-n) /a=-1 表达式=-1/
a=m+n,m-n /a=3 表达式=-1/

数据类型转换 float->double
char,short->int
unsigned short->unsigned int
强制类型转换 (double)(a+b)

关于++x和x++ ++x为先加再给表达式赋值 x++是献给表达式赋值再加

printf(格式控制符,输出表项)
格式控制符 %[-或0][m][.][n][l]格式符
-左对齐 0 右对齐
m 占用数据宽度
n n位小数
m.n共m列其中n位小数
l长整形或双精度
%%->%

scanf(格式控制字符串,地址表项)

if语句
if(a>0)
x=a+2;
else {
x=a-2;
}

switch语句
switch(语句序列1)
{
case 表达式1 : 语句序列1;
case 表达式2 : 语句序列2;

case 表达式n : 语句序列n;
default : 语句序列n+1;
}

条件运算符和条件表达式
表达式1 ? 表达式2 : 表达式3

goto语句和标号
L:表达式1;
goto L;

while循环语句
while(语句1)
表达式1;

					注: 语句1的值为0
					      goto到循环结构之外的语句结束
					      return语句结束
					      break语句

do-while循环
do
{
语句1;
}
while (表达式1);
注: 表达式1的值为0
break语句结束

					      goto到循环结构之外的语句结束
					      return语句结束

for循环
for(表达式1;表达式2;表达式3)
语句1;

continue语句
continue ;
/*代表终止此次循环的执行,是否执行下一次循环依据循环条件判定/

二维数组的初始化
int a[2][3] = {{1,2,3},{4,5,6}};
int a[2][3] = {1,2,3,4,5,6};
int a[2][3] = {{1},{2,3}};

字符组常量
char a[5];
int a[5];
/二者等价,通过ASCII码转换/

字符串的输入和输出 /先调用#include<string.h>/
char c[]=“c is the best.”;
printf(“%s”,c);

puts()		put(c);
gets() 		gets(c);
strcat()		strcat(c,a);
strcpy()	strcpy(str1,str2);	/*把str2字符复制到str1*/
strcmp()	strcmp	(str1,str2);	/*比较二者字符数,前>后正整数*/
strlen()		stelen(c);	
strlwr()		strlwr(c);		/*字符串李大写字母->小写*/
strupr()		strupr(c);		/*大写*/

函数
float sab(int n)
{

		}

调用函数在定义函数前需要进行生命
void main()
{
float cube(float a);
cube(x);
}

二维数组作为函数形参的时候,可以不定义第一个参数(行数)但必须定义第二个参数(列)
数组作为参数调用的时候,实参应采用数组名。
#include<stdio.h>
int aver(int a[])
{

}

	void main(){
		aver(a,10);
		return 0;
		}

若使用全局变量前的函数体中使用了此变量,则需要在该函数体中进行外部声明

	int cube(int a){
		extern int x;
		}
	int x;

在同一个文件里,局部变量和全局变量重名时,局部变量的函数体中全局变量失效

在c中,用户可以使用的存储区分为三种
程序区->可执行程序的机器指令
静态存储区->固定的存储区域,比如全局变量
动态存储区->动态的存储区域,用于存储临时使用的局部变量,随取随释放,动态管理

形参

局部变量的三种使用方法
->自动型 auto int a;
->局部静态变量 static int a;
->寄存器变量 register int a;
注: 只有形参和局部自动变量可作为寄存器变量
只char int、指针变量可作为寄存器变量,float double long等超过寄存器长度
当寄存器已被占用满时自动分配为auto

全局变量的使用方法
->外部全局变量
大的工程中每个小文件的集合,需要调用不同的变量,用extern说明
注: extern不能初始化变量,只能说明变量
错误示范:extern int a=1;错误
正确示范:extern int a;
->静态全局变量
只在本文件中使用 static int a;
尽量不要使用static int a=1;(未被证实书中未提及)

函数的内部和外部
extern float cube(float a){

}

	static float cube(float a){
					…
					}

编译预处理
#include<stdio.h> /*等效于
#include“stdio” */

#define
以上等等命令在文件开始执行时进行预处理用#来定义语句结尾不适用;

宏定义
#define PI 3.1315926(同时也可以是文本,进行文本替换)

		注: 可以使用之前定义过的宏名进行重新定义
		         若代码中出现了“”中的字符与宏定义相同则在预编译处理中不进行定义				
		        宏定义中若出现形参必须在形参两边加()
				exp:	#define MULTI(x) ((x)*(x))
					int a=10,b=10;
					int sun;
					sun=MULTI(a+b)*10;
				经过预编译,则
					sun=((a+b)*(a+b))*10;
				错误范例:#define MULTI(x) (x*x)

文件的包含
#include<….h>
#include”….h”
注:
<>是按照c语言编译器默认路径查询,””是先查当前路径再按默认路径查询
若file1.h中用到file.2 ,file2.h中用到file3.h,则必须把调用file3.h写在前面。
#include<file3.h>
#include<file2.h>

条件编译:用于只把源代码其中的一部分编译到目标程序中
if格式—> if 表达式
程序段1;
[#else
程序段2;]
#endif
ifdef格式-> ifdef 宏名
程序段1;
[#else
程序段2;]
#endif
/若已经被定义过该宏,则编译程序段1,若未定义过,则编译程序段2,若无else字段,则直接跳过#endif命令段/

定义指针
float *p;
赋值指针
p=m;
取地址运算
p=&m;
取内容运算
n=*p;
指针可以与整型数字加减,表示连续数据类型中的位置,同样是指针
两个同类型指针相减是表示两个指针之间的元素数(不算两边元素,开区间)
两个指针之间也可以使用不等号和等号

强制类型转换
(int*)指针; /p为指针/

指针被初始化时指向系统中的随机位置,所以要养成好习惯先把指针置成空指针
p=0;
p=NULL;
p=‘/0’;
以上三个表达式等价

字符串指针
char *p;
p=NULL;
*p=“C language”
p指向’C’的存储单元,该字符串在内存中是这样的
C language\0 /字符串最后一个字符后面的存储单元自动加’\0’/

/对于数组可以直接在定义时直接赋值,不可以在定以后对数组整体赋值,如
char s[2];
s[]=“CS”;
以上代码是错误的
/

对于二维数组
int d[4][3];
d[0] d[1] d[2] d[3]分别为第一行等一维数组。

指针也可以作为数组
int *p[3][3];

指针与字符串数组
可以如此定义
char *f[]={“Clanguage”,”sjiajda”};

指向数组的指针变量
int (*p)[];

void通用指针
void main()
{

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值