C语言第三次课总结(作用域,生存期,数组,运算符,取模取余,指针)

(1)进程是程序的一次执行

java正数取余负数_java正数取余负数

#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区,直到程序结束。
//如果程序没有编译链接成功,一定是在作用域(可见性)上出现了错误。

全局变量作用域:

java正数取余负数_运算符_02


局部变量作用域:

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;

生存期概念示例

java正数取余负数_求余_03


(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)运算符

java正数取余负数_java正数取余负数_04


//左值可读可写 只具有右值则只可读。a=10;可 10=a;不可。运算符举例

java正数取余负数_求余_05


运算符优先级

java正数取余负数_作用域_06


//* =是从右到左 如: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)。

java正数取余负数_作用域_07


取模取余%

对于整型数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语言来说)

基本概念:

java正数取余负数_作用域_08

//地址有高低无大小,不可以相加但可以进行减法。

示例:

java正数取余负数_c语言_09


//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本身