使用的编译器为vs2026,大家可以复制并编译,以便更好地学习。
创建first.c,将下列代码复制进去
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
typedef unsigned int uint;
//typedef的作用是对类型“起小名”,将unsigned int重命名为uint
typedef struct Node
{
int data;
struct Node*next;
}Node;
//重命名为Node
//函数:F(x1,x2...)=关于自变量的表达式(理解为工厂,给原材料,给出产品)
int ADD(int x, int y)
//函数的返回类型:int;函数名:ADD;函数参数:x,y;函数体:{...}
{
int z=0;
z=x+y;
return z;
/*
return (x + y);
*/
}
void text1()
{
int a =1;
//局部变量a,进入其范围创建,出其范围销毁
//存储在栈区
a++;
printf("%d ",a);
}
void text2()
{
static int a = 1;
//static修饰的局部变量a,在编译时分配空间,局部变量出作用域后不销毁
/*本质上static修饰局部变量时改变了变量的存储位置,
从栈区转移到了静态区(程序的生命周期),
从而影响了变量的生命周期*/
a++;
printf("%d ", a);
}
extern int hole;
extern int s_hole;//无效
extern int text3(int x, int y);//声明外部函数
//定义标识符常量
#define PI 3.14
//定义宏
#define text4(x) (PI*(x)) //宏名:text4;宏参:x,无类型;宏体:(PI*(x))
//宏是完成替换的
int main()
{
printf("%d\n",ADD(1,2));
//C语言是结构化的程序设计语言:顺序,选择,循环
/*
//选择语句
int input = 0;
scanf("%d", &input);
if (input == 1)
{
printf("玩电脑\n");
}
else
{
printf("玩手机\n");
}
*/
//循环语句
int line=0;
int sum=0;
while (line <= 100)
{
sum+=line;
line++;
}
printf("%d %d\n",sum,line);
line=0;
//数组:一组相同类型元素的集合
int arr[10]={0,1,2,3,4,5,6,7,8,9};
//这是有序号的,从0-9,叫数组的下标
printf("%d\n",arr[8]);
while (line < 10)
{
printf("%d ",arr[line]);
line+=1;
if (line == 10)
{
printf("\n");
}
}
//操作符
//1.算数操作符:+,-,*,/,%
printf("%d\n",7/2);//结果为3
printf("%.2f\n", 7/2.0);//保留小数点后两位,结果为3.50
//除号两端均为整数时,执行整数除法;有一浮点数就执行浮点数除法
printf("%d\n",7%2);//取模,结果为1
//取模操作符的操作数必须是整数
//2.移位操作符:<<,>>
//3.位操作符:&,|,^
//4.赋值操作符:=,+=,-=,*=,%=,/=,^=,|=,&=,<<=,>>=
int a =0;//初始化
a=10;//赋值
//5.单目操作符:只有一个操作数的操作符
//!(反,0表示假,非0表示真),-(负值),+(不变),&(取地址)
//sizeof(操作数的类型长度,单位为字节),~(按位取反)
//++,--(前置:先++/--,后使用;后置:先使用,后++/--),*
//(数据类型)强制类型转换
int arr1[10]={0};
printf("int类型的变量a的大小为%dbyte\n", sizeof(a));
printf("int类型的大小为%dbyte\n", sizeof(int));
printf("数组arr1的大小为%dbyte\n", sizeof(arr1));
printf("数组arr1的元素个数为%d\n", sizeof(arr1) / sizeof(arr1[0]));//求数组的元素个数
int b=10;
int c=b++;//后置,先将b赋值给c,b再自增1
printf("c=%d\n", c);
printf("b=%d\n", b);
printf("%d\n", (int)3.14);
//6.关系操作符:<,>,<=,>=,!=,==(判断相等,注意区分赋值)
//7.逻辑操作符:&&(并且),||(或者)
if (b == 11 && c==10)
{
printf("真\n");
}
//8.条件操作符(三目操作符):exp1 ?exp2 :exp3
printf("较大值为%d\n", (b>c ? b : c));
//9.逗号表达式:exp1,exp2,exp3,...,expn(从左向右依次计算,整个表达式的结果是最后一个表达式的结果)
printf("表达式结果为%d\n",(c=b+c,b=b-c,b+c));
//c=21,b=-10,逗号表达式的结果为11
//10.下标引用[],函数调用(),结构成员 .,->
printf("arr[0]=%d\n", arr[0]);//arr与0是[]的操作数
//创建数组时需申请空间,所以需要是常量,而访问时空间已定,可以是变量
printf("调用ADD函数的结果为%d\n", ADD(1, 2));//ADD,1,2都是()的操作数
//关键字:
//for,while,do while,break,continue
//if else,switch,case,default,goto
//char,short,int,long,float,double,signed,unsigned
//enum,struct,union,typedef,void,volatile
//const,extern,register,static,return,sizeof,auto
//typedef
uint num=0;//等价于unsigned int num=0;
Node n;//等价于struct Node n;
//static
//1.修饰局部变量
int i = 0;
for (;i < 10;i++)
{
text1();
if (i == 9)
{
printf("\n");
}
}
i=0;
//打印10个2的原因是text1()函数内的a是局部变量
for (;i < 10;i++)
{
text2();
if (i == 9)
{
printf("\n");
}
}
//打印2-11的原因是text2()函数内的a是static修饰的局部变量
//2.修饰全局变量
printf("%d\n",hole);
/*printf("%d\n", s_hole);
报错,因为s_hole不具有外部连接属性*/
//3.修饰函数
int x=2;
int y=3;
printf("%d\n", text3(x,y));
//register寄存器
//存储设备:寄存器,高速缓存,内存,硬盘
//速度由快到慢,空间由小到大,造价由高到低
//诺cpu中央处理器所需的数据大部分能在寄存器找到,那么运行速度就提高了,这就产生了金字塔结构
register int reg=3;//建议3存放在寄存器中
//define
printf("%.2f\n", PI);
printf("%.2f\n", text4(2));
//变量的命名:
//1.有意义。
//2.字母,数字,下划线组成,不能有特殊字符,不以数字开头
return 0;
}
创建sec.c,将下列代码复制进去,与first.c在同一工程中。
#define _CRT_SECURE_NO_WARNINGS
int hole=2025;
//全局变量具有外部链接属性
static int s_hloe=2026;
//static修饰全局变量时,外部链接属性变为内部连接属性,其他源文件就不能使用了
int text3(int x, int y)
{
return x * y;
}//函数也具有外部链接属性,加上static后就不具有外部链接属性了
243

被折叠的 条评论
为什么被折叠?



