编程是一门实践性的学科,绝对不是理论。如果不动手“敲”代码的话,永远都学不会编程。很多问题只有在“敲代码”的时候才能发现,才会有更加深刻的体会、领悟和理解。而不是靠死记硬背书中的注意点,那样真的很痛苦。我在学习编程的时候从来都不会刻意记忆什么注意点,这些知识点都是在不停“敲代码”的过程中,自然而然地融入我的身体中的。
#include
//主函数是程序的入口
//主函数有且仅有一个
//在一个工程中有且只有一个主函数
int main()
{
printf("Hello world\n");
return 0;
}
char 字符数据类型 1(字节)
short 短整形 2(字节)
int 整形 4(字节)
long 长整形 4(字节)
long long 更长的整形 8(字节)
float 单精度浮点数 4(字节)
double 双精度浮点数 8(字节)
如何求解上述数据类型所占多大空间?
#include
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
return 0;
}
程序结果如下:
在C语言中,不变的量用常量来表示,变的量用变量来表示。
全局变量:定义在大括号的外部
局部变量:定义在大括号的内部
#include
int a = 1000;//全局变量-定义在大括号的外部
int main()
{
int a = 100;//局部变量-定义在大括号的内部
//局部变量的名字和全局变量的名字冲突的情况下,局部优先
printf("a=%d\n", a);
return 0;
}
#include
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;//存放变量相加的结果
//输入
scanf("%d %d", &num1, &num2);
//相加
sum=num1 + num2;
//输出
printf("%d\n", sum);
return 0;
}
变量的作用域和生命周期
作用域:一段程序中所用到的名字并不是总是有效、可见的。而限定这个名字的可用性的代码范围就是这个名字的作用域。
生命周期:
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
1、字面常量
20;
3.14;
'a';//字符常量
"abcde";//字符串常量int a = 10;
char ch = 'w';2、 const修饰常变量
const是一个C语言的关键字
const是常属性的意识
const int num = 10;3、#define定义的标识符常量
int a = M;
int arr[M] = { 0 };4、枚举常量
enum Color
{
RED,//0
GREEN,//1
BLUE//2
};
#include
#include
int main()
{
char arr1[] = { "abc" };
char arr2[] = { 'a','b','c' };//没有'\0'则会出现乱码
printf("%s\n", arr1);
printf("%s\n", arr2);
//strlen-库函数
//求字符串长度
//计算的是'\0'之前出现的字符的个数
printf("%d\n", strlen(arr1));
return 0;
}
程序结果如下:
转义字符:
转义字符 释义
\? 在书写连续多个问号时使用,防止他们被解析成三字母词\' 用于表示字符常量 '\“ 用于表示一个字符串内部的双引号\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符。\a 警告字符,蜂鸣\b 退格符\f 进纸符\n 换行\r 回车\t 水平制表符\v 垂直制表符\ddd ddd 表示 1~3 个八进制的数字。 如: \130 X\xdd dd 表示 2 个十六进制数字。 如: \x30 0
注释
#include
int main()
{
int coding = 0;
printf("你会去敲代码吗?(选择1 or 0):>");
scanf("%d", &coding);
if (coding == 1)
printf("坚持,你会有好offer\n");
else
printf("放弃,回家卖红薯\n");
return 0;
}
//while循环的实例
#include
int main()
{
printf("加入比特\n");
int line = 0;
while(line<=20000){
line++;
printf("我要继续努力敲代码\n");
}
if(line>20000)
printf("好offer\n");
return 0;
}
#include
int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
scanf("%d %d", &num1, &num2);
sum = Add(num1, num2);
printf("%d\n", sum);
return 0;
}
#include
int main()
{
//数组-能够存放一组相同类型的元素
int i = 0;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (i = 0; i < 10; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
//C99中引入加长数组
}
算术操作符 + - * / %
移位操作符 >> <<
位操作符 & ^ |
赋值操作符 = += -= *= /= &= ^= |= >>= <<=
单目操作符
! 逻辑反操作- 负值+ 正值& 取地址sizeof 操作数的类型长度(以字节为单位)~ 对一个数的二进制按位取反-- 前置、后置 --++ 前置、后置 ++* 间接访问操作符 ( 解引用操作符 )( 类型 ) 强制类型转换
关系操作符
>>=<<=!= 用于测试 “ 不相等 ”== 用于测试 “ 相等 ”
逻辑操作符
&& 逻辑与|| 逻辑或
条件操作符
exp1 ? exp2 : exp3
逗号表达式
exp1 , exp2 , exp3……expN
下标引用、函数调用和结构成员
[] () . ->
//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
//观察num1和num2,这两个变量的类型是一样的
unsigned int num1 = 0;
uint_32 num2 = 0;
return 0;
}
#include
void test()
{
int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();
}
return 0;
}
#include
void test()
{
//static修饰局部变量
static int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();
}
return 0;
}
#include
int Add(int x, int y)
{
return c + y;
}
//Test.c
int main()
{
printf("%d\n", Add(2, 3));
return 0;
}
static int Add(int x, int y)
{
return c + y;
}
//test.c
int main()
{
printf("%d\n", Add(2, 3));
return 0;
}
结论:
#include
//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
int main()
{
int sum = ADD(2, 3);
printf("sum = %d\n", sum);
sum = 10*ADD(2, 3);
printf("sum = %d\n", sum);
return 0;
}
#include
//内存单元都有编号,这个编号就是地址,我们把这个地址也叫指针
int main()
{
int a = 10;
int* pa = &a;//pa是用来存放地址的,所以我们把pa叫做指针变量
*pa = 100;
printf("%d", a);
char ch = 'w';
char* pc = &ch;//&取地址操作符
*pc='q';//解引用操作符,它的意思就是通过pc中存放的地址,找到pc指向的内容。
printf("%c", ch);
return 0;
}
#include
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
printf("%d\n", sizeof(char *));
printf("%d\n", sizeof(short *));
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(double *));
return 0;
}
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
#include
//结构体
typedef struct Stu
{
char name[20];
int age;
char sex[5];
char id[20];
}Stu;
void Print(Stu* ps)
{
//printf("%s %d %s %s\n",(*ps).name,(*ps).age,(*ps).sex,(*ps).id);
printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->id);
//->结构成员访问操作符
//结构体指针->结构体成员
}
int main()
{
//结构体变量
Stu s1 = { "张三",18,"男","2021060701" };
Stu s2 = { "如花",45,"女","2021060702" };
Stu s3 = { 0 };
scanf("%s %d %s %s", &s1.name, &s1.age, s1.sex, s1.id);
printf("%s %d %s %s\n",s1.name,s1.age,s1.sex,s1.id);
//.结构成员访问操作符
//结构体变量.结构体成员
return 0;
}