01 程序的编译执行、变量、static和const关键字、循环的转换、指针与数组

孤人 提交于 2020-02-10 16:41:35

1.代码编译的几个阶段

.c .cpp 源文件
.i 预处理文件
.o(linux操作系统下) .obj(windows操作系统下) 目标文件
.exe 可执行文件

分为三个阶段:预编译、编译、链接过程
所有的#都是在预编译过程中展开的

2.程序的执行

1>程序和进程的区别:

程序执行后会进入进程。
程序是静态的,进程是动态的。
程序在运行的时候会耗损时间(cpu)和空间资源(内存)。

2>内存的四个区域

.code 代码段
.data 数据区
.heap 堆区
.stack 栈区

两个凡是:1.凡是在函数外部定义的变量叫做全局变量 ,存储在数据区。
2.凡是在函数内部定义的变量叫做局部变量,存储在栈区。

3.变量的分类以及特性

变量可以分为:全局变量、在函数内定义的局部变量、在块内定义的局部变量。
变量的两个特性:可见性和生存期
可见性:针对编译链接过程来谈论的
具体应用:当局部变量和全局变量重名时:在函数内,定义局部变量后,全局变量就被隐藏了。(函数内)
针对这种情况,我们可以采用全局域解析符::(即告诉编译器不用局部变量 ,用的是全局变量)
块内的变量想用全局变量时,也可以采用::符号,达到使用全局变量的目的。
(ps:不存在 在块内想要使用函数里的局部变量的情况)

生存期:在程序运行时谈论生存期
具体应用:运行主函数时,在栈帧中开辟空间(局部变量)。
调用函数时,在栈帧中开辟空间。
函数调用完成,栈帧收回。
主函数结束,栈帧收回。
对于全局变量而言,生存期就是程序开始运行时,全局变量就被加载在数据区,程序运行结束时,全局变量的生存期就结束了。
数据区:数据区可以大概被分为初始化区域和未初始化区域。
未初始化区域:将字节全部填充为0
未初始化的局部变量全部填充为cccc(16位进制)

思考

  • 为什么全局变量区叫做数据,局部变量叫做代码(除了存储位置不同,还有什么不同

4.static关键字的影响

static关键字对全局变量的可见性有影响,对生存期没影响
对局部变量的可见性没影响,对生存期有影响

5.const的用处(L)

const可以修饰变量、数组、指针
const在c语言中不可以修饰函数 c++中可以
const只可读不可写 没有只可写不可读的情况(一定要初始化)

6.for循环和while循环以及do-while循环之间的转换关系(L)

7.指针的分类以及特性

指针有两个值:自身的值和指向的值(解引用*)
指针类型:

int main(){
int a=10;
int *p1=&a;  //正常的最好的指针
int *p2;     //野指针 没有初始化的指针
int *p3=NULL;  //空指针 不指向任何一个对象(地址)
}

失效指针:原本指向的变量消失了,就会变成无效指针。
注:
1.不允许定义野指针。
2.函数的形参是指针的时候需要判空 !!!
3.函数的形参要根据函数的意义,判断是否合法(比如长度,个数需要判断是否越界)。

8.数组与指针的结合(L)

数组最大的问题在于查表法。
初始化函数和输出函数
!!!判空和查重很重要。!!!

9.代码的合法性和完整性(时间与空间的平衡)(L)

1.for循环中嵌套while循环,因此效率不高,对时间的消耗比较大,但是对数据的范围空间没有要求,不囿于100个数字。
2.数组查表法,将0-99位的数值全部置为0,出现过的数字则置为1,所需的时间短,但如果不是100个数字,更大的数字则需要开辟更大的数组空间,因此耗费的空间资源比较大。
中心思想
平衡的是时间和空间的问题。

附:rand()函数和srand()函数的用法

rand
语法:
#include <stdlib.h> int rand( void );
功能: 函数返回一个在零到RAND_MAX 之间的伪随机整数。例如: srand( time(NULL) ); for( i = 0; i < 10; i++ ) printf( “Random number #%d: %d\n”, i, rand() );
srand
语法:
#include <stdlib.h> void srand( unsigned seed );
功能: 设置rand()随机序列种子。对于给定的种子seed, rand()会反复产生特定的随机序列。 srand( time(NULL) ); for( i = 0; i < 10; i++ ) printf( “Random number #%d: %d\n”, i, rand() );
time
语法:
#include <time.h>
time_t time( time_t *time );
功能: 函数返回当前时间,如果发生错误返回零。如果给定参数time ,那么当前时间存储到参数time中。
因此,在随机数产生时,为了使得随机数不固定,则采用srand函数,其中的time可变,因此产生的随机数每次都不同,而因为引入了time因此必须引入#include<time.h>头文件。

还有一些问题:
数组的左移和右移
数组左移k位
数组右移k位
Left_Move_Array
Right_Move_Array
Left_Move_Array
Right_Move_Array
下次再写啦~~~~~挥挥

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!