初学者的探索之路01
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
下次再写啦~~~~~挥挥
来源:CSDN
作者:lijing-blog
链接:https://blog.csdn.net/weixin_45893523/article/details/104242798