C语言第三次课总结(作用域,生存期,数组,运算符,取模取余,指针)
(1):进程是程序的一次执行
#include <stdio.h>
void fun()
{
int x = 10;
int y = 20;
printf("%d",x+y);
}
int main()
{
int a = 10;
fun();
return=0;
}
//只会给主函数中a分配到栈区,不会给x y ,只有在主函数中调用fun,进入fun后才会给x y分配空间,调用完后x y的空间也就没有了。
//作用域(可见性):此阶段针对编译和链接过程,只有在作用域内标识符才能被使用。
//生存期(生命期):此阶段针对程序的执行过程。
局部变量生存期:函数被调用,则创建,调用结束则空间会被释放。
全局变量生存期:从程序执行开始前存放在.data区,直到程序结束。
//如果程序没有编译链接成功,一定是在作用域(可见性)上出现了错误。
全局变量作用域:
局部变量作用域:
void fun()
{
int x = 100;//变量名相同 但此处x可见性在fun中有效
}
void main()
{
int x = 100;//此处x可见性在main中有效
}
int g-max;
void main()
{
int a = 10;
int b = 20;
int c = a+g-max;
}
int main()
{
int x = 0;
int y = 20;
x = y+x;
}
int g-mid=10;
生存期概念示例
(2)数组
【】括号内的放值要求:大于0 常性整型。
int ar [10];//type+num=40
int ar [10]={12,23,34,45,56,67,78,89}剩余两个空间自动填充0.
**字节个数**
char// 1
short//2
int//4
long int//4
long long//8
float//4
double//8
long double//8
bool//1
(3)运算符
//左值可读可写 只具有右值则只可读。a=10;可 10=a;不可。
运算符举例
运算符优先级
//* =是从右到左 如:int a=2 b=3 c=4;a* =b+c;得14
//a++ ++a在单独使用时表达相同但b=a++ b=++a则有区别
//b=a++先取出a放到临时储存空间中再把a给b累加1 再回写给a
//b=++a先把a取出累加1 再回写给a 读给b(尽可能多使用前置++a)。
取模取余%
对于整型数a,b来说,取模运算或者求余运算的方法都是:
1.求 整数商: c = [a/b];
2.计算模或者余数: r = a - c*b.
求模运算和求余运算在第一步不同: 取余运算在取商c的值时,向0 方向舍入(fix()函数);而取模运算在计算商c的值时,向负无穷方向舍入(floor()函数)。
例如计算:-7 Mod 4
那么:a = -7;b = 4;
第一步:求整数商c,如进行求模运算c = -2(向负无穷方向舍入),求余c = -1(向0方向舍入);
第二步:计算模和余数的公式相同,但因c的值不同,求模时r = 1,求余时r = -3。
归纳:当a和b符号一致时,求模运算和求余运算所得的c的值一致,因此结果一致。
当符号不一致时,结果不一样。
另外各个环境下 % 运算符的含义不同,比如c/c++,java 为取余,而python则为取模。
(4)指针(相当于地址 ,对于c语言来说)
基本概念:
//地址有高低无大小,不可以相加但可以进行减法。
示例:
//printf(“0x%08x\n”,&a);输出宽度为8 前期无宽度用0来填充。输出为小写f,把里面改为大写08X则输出的F。
//在x86下占 4byte=32bite
//在x64下占 8byte=64bite
//int a 与intp 同是变量但类型不同 后者放的是p的地址。
**“”**的不同:int c=a*b(代表乘法); int *p(代表声明);*p=100(代表指向)。
//p=&a; *p=a; p用来存放a的地址,*p就是a本身。