前言
记录1.6学习内容及要点,主要内容:顺序语句、选择语句、循环语句、函数思想、可见性(作用域)和生存期、数组
一、语句
顺序语句
按照语句出现的先后顺序依次执行;
选择语句
根据条件判断是否执行相关语句;
//if——else语句
if(T/F)
T执行
else
F执行
//switch —— case 语句
switch(表达式){
case 常量值1:
语句体1;
break;
case 常量体2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
循环语句
当条件程成立时,重复执行某些语句
for( ; 条件; 自增 ){
循环体
}
do {
循环体
}while(判断条件)
while(条件){
循环体
}
二、函数思想
通过函数将一个复杂问题拆解为若干个易解决的小任务。体现结构化程序设计由粗到精的设计思想
封装性:
- 考虑函数名(见明知意)
- 考虑传入的参数(数量、类型)
- 考虑返回值(类型)
以一个个函数实现具体的小任务,以此,逐步实现某复杂问题
嘻嘻嘻 一个有趣的理解
老师让我去买烟,给了钱让买华子(嗯 参数有了),我买了把华子给了老师(返回值)
三、可见性(作用域)和生存期
可见性(作用域)
标识符能够被识别的范围
如:形参或在函数内部定义的局部变量,他们的作用域都在该函数内。在函数外部定义的标识符——全局变量,作用域为从定义起至整个源文件结束。
生存期(生命期)
特指程序的执行过程
标识符从程序运行开始被创建、具有空间 至程序结束、释放空间之间的时间
- 局部变量生存期:从函数被调用,到该函数执行完毕。存放在 .stack(栈区)在栈帧中存放
- 全局变量生存期:从程序执行前开始,到该程序执行后结束。存放在 .data(数据区)
- 动态生命期:标识符有特定的函数或运算来创建或释放。如:调用malloc()为变量分配存储空间,变量生命期开始,调用 free()释放空间或程序结束,变量生命期结束。存放在 .heap (堆区)
四、数组
相同类型元素的集合 在对数组的介绍中要说明类型、大小
定义形式如下:
int a[5] = {1,2,3,4,5}; //sizeof(a) = 4*5 =20; a是5个int元素数组
char ch[] = {'a', 'b', 'c', 'd'}; //4字节
int b[3];
int c[10] = {0,1,2,3}
计算数组的长度:
int ar[] = {1, 2, 3, 4, 5}
int len = sizeof(ar) / sizeof(ar[0]); //整个数组的大小 除 一个元素的大小 = 元素个数
字符串的长度 != 字符数组的大小
int main()
{
char stra[] = { "hello" };
printf("lenth: %d:", strlen(stra)); // 5 5个字符,不算\0
printf("size: %d:", sizeof(stra)); //6 5个字符 + 结尾\0
}
给数组赋值: 1.for 循环挨个赋值 2.头文件:<string.h>; memcpy (目标数组, 来源数组, 赋的个数); strcpy_s (目标数组, 来源数组);
#include<stdio.h>
#include<string.h>
int main()
{
char str_a[] = { "Hello world" };
char str_b[6];
char str_one[] = "Tomorrow";
char str_two[20];
memcpy(str_b, str_a, 4);
strcpy_s(str_two, str_one);
}
结果:
字符串内容比较:头文件:<string.h>
函数:strcmp(str1,str2)
返回值:若str1 < str2: 返回负数; 若str1 = str2:返回0; 若str1 > str2:返回正值
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止
总结
- c语言函数封装性的思想
- 作用域和生存期的理解