对自己说的话:
虽然毕业后尚未从事开发相关的工作,但是觉得自己还是喜欢这门学科,那就利用工作的空余时间捡起来!今天就说这么多,散会!—2023/3/20 0:06
day2 学习日志:
1、函数的定义及调用 Max()
int Max(int x, int y){
if (x > y)
return x;
else
return y;
}
int main(){
int num1 = 12;
int num2 = 19;
int max = 0;
max = Max(num1, num2);
printf("最大值为:%d\n", max);
return 0;
}
2、特殊运算符 1.后置++ 2.先置++ 3.后置-- 4.先置–
int main() {
int a = 10;
//1、后置++,先使用再++
int b = a++;
printf("a = %d,b = %d\n", a, b); //a = 11,b = 10
//2、前置++,先++再使用
int b = ++a;
printf("a = %d,b = %d\n", a, b); //a = 11,b = 11
//3、后置--,先使用再--
int b = a--;
printf("a = %d,b = %d\n", a, b); //a = 9,b = 10
//4、前置--,先--再使用
int b = --a;
printf("a = %d,b = %d\n", a, b); //a = 9,b = 9
return 0;
}
3、条件操作符(三目操作符) exp1 ? exp2 ,exp3
int main() {
int a = 12;
int b = 15;
int max = 0;
max = a > b ? a : b;
printf("max = %d", max);
return 0;
}
4、关键字:
- typedef - 类型定义 - 类型重定义
typedef unsigned int u_int //将unsigned int名字简化为u_int
- static
static - 修饰局部变量(局部变量生命周期变长)
void test() {
int a = 0;
//static int a = 0;
a++;
printf("这是第%d行。\n", a);
}
int main() {
int i = 0;
while (i < 5) {
test();
i++;
}
return 0;
}
这是第1行。
这是第1行。
这是第1行。
这是第1行。
这是第1行。
void test() {
//int a = 0;
static int a = 0;
a++;
printf("这是第%d行。\n", a);
}
int main() {
int i = 0;
while (i < 5) {
test();
i++;
}
return 0;
}
这是第1行。
这是第2行。
这是第3行。
这是第4行。
这是第5行。
static - 修饰全局变量(改变了变量的作用域)
extern - 声明外部函数/变量
//1_1.c源文件中
int g_val = 2023;
//1.c源文件
int main() {
extern int g_val;
printf("g_val = %d\n", g_val);
return 0;
}
输出:
g_val = 2023
修改代码后:
//1_1.c源文件中
static int g_val = 2023;
//1.c源文件
int main() {
extern int g_val;
printf("g_val = %d\n", g_val);
return 0;
}
运行后报错:
原因就是g_val变量只能在定义的源文件中使用,出了此文件无法被使用,即改变了变量的作用域
1>ex2.obj : error LNK2001: 无法解析的外部符号 g_val
1>E:\C student Files\Code\student_day2\x64\Debug\student_day2.exe : fatal error LNK1120: 1 个无法解析的外部命令
static - 修饰函数(改变了函数作用域/链接属性)
同修饰变量一样,限制了函数的使用
- define - 定义全局变量/函数
例如比较数值大小的两种方法:
//1_1.c源文件中
int Max(int x, int y) {
if (x > y)
return x;
else
return y;
}
//1.c源文件
#define max(x,y) (x>y?x:y)
extern int Max(int, int);
int main() {
int a = 7;
int b = 9;
int c = 13;
int d = 17;
int max1 = max(a, b);
printf("max1 = %d\n", max1);
int max2 = Max(c, d);
printf("max2 = %d\n", max2);
return 0;
}
输出:
max1 = 9
max2 = 17
5、指针
int main() {
int a = 10; //4个字节
int* p = &a;//取地址
printf("a的地址是:%p\n", &a); //p是一个变量-指针变量
printf("取到地址:%p\n", p);
*p = 15; //* - 解引用操作符
printf("a = %d\n", a);
return 0;
}
输出:
a的地址是:000000CB1211FC94 //非固定,地址由机器分配
取到地址:000000CB1211FC94
a = 15
同理字符串也是如此:
int main() {
char ch = 'w';
char* pc = &ch;//取地址
double b = 3.14;
double* pb = &b;//取地址
*pc = 'a';//通过地址修改里面的字符
printf("ch = %c\n", ch);
*pb = 5.32;//通过地址修改里面的数值
printf("pb = %lf\n", b);
printf("指针变量的大小为:%d\n", sizeof(pb));//x64为8、x86为4
return 0;
}
输出:
ch = a
pb = 5.320000
指针变量的大小为:8
6、结构体
实例:定义一个Book的结构体,包含书名和售价
struct book{
char name[20];//c语言程序设计
short price;//55元
}; //Book结构体的定义
int main() {
struct book b1 = { "c语言程序设计",55 };
//1、结构体内部打印
printf("书名:《%s》\n售价:%d¥\n", b1.name, b1.price);
struct book* pb = &b1;//结构体的指针变量
//2、指针变量打印
//用pb打印书名和价格:1、结构体变量.成员
printf("%s\n%d\n",(*pb).name,(*pb).price);
//3、指针变量另一种方式
//简化代码->:2、结构体指针->成员
printf("%s售价为%d\n", pb->name, pb->price);
//4、结构体值的修改
strcpy(b1.name, "c++");//修改字符串的时候需要使用strcpy函数 - <string.h>
b1.price = 45;
printf("修改后书名为:《%s》\n修改后售价为:%d¥\n", b1.name,b1.price);
return 0;
}
输出:
书名:《c语言程序设计》
售价:55¥
c语言程序设计
55
c语言程序设计售价为55
修改后书名为:《c++》
修改后售价为:45¥
day3 学习日志:
一、C语言是一门‘结构化’的程序设计语言
1、顺序结构
2、选择结构
分支语句:
- if
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
- switch
3、循环结构
循环语句:
-
while
-
for
-
do while