版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/boy_of_god/article/details/82557889
1、什么叫分配内存,什么叫释放内存
- 1、系统把某一块内存的使用权限分配给程序
- 2、 操作系统把分配给该程序的内存空间的使用权利收回,改程序不能使用这一块内存空间这叫释放内存
附注:释放内存不是把该内存的内容清零
2、变量为什么必须初始化
不初始化,则变量通常是垃圾值
3、详细说明系统是如何执行int i = 5;这个语句的
- 1、vc++6.0请求操作系统为i分配内存空间
- 2、操作系统会在内存中寻找一块空闲的区域,把该区域当做i来使用
- 3、Vc++6.0会把i和这块空闲的区域关联起来,今后对字母i操作就是对这块空闲的区域操作
- 4、把数据5存储到字母i所关联的区域中
附注:所谓的内存区域就是内存的一块存储单元
4、详细的说出C语言所有的基本类型:
int long int short int char float double
5、在printf函数中,int long int char double flaot 分别用什么输出
- 1、%d %ld %c %lf %f
- 2、 %Xf 输出的是地址16进制
6、函数的优点
- 1、避免重复性操作
- 2、有利于程序模块化
7、谈谈对函数的理解
8、什么是指针,什么是地址,什么是指针变量,三者之间是什么关系?
- 1、地址是内存单元的编号(地址不是一块存储单元),指针就是地址,指针和地址是同一个概念
- 2、指针变量是存放内存单元编号的变量
- 3、指针变量和指针是两个完全不同的概念,只不过人们通常把指针变量简称为指针
9、请写出静态变量和动态变量的异同
- 相同:
- 都需要分配内存空间
- 不同:
- 静态变量时系统自动分配,自动释放的,程序员无法在程序运行的过程中手动分配,也无法在程序运行的过程中手动释放
静态变量是在栈中分配的,函数运行终止后,静态变量的存储空间才会被系统自动释放 - 动态内存是由程序员手动分配的,手动释放,程序员可以在程序运行的过程中手动分配,也可以在程序运行的过程中手动释放,
动态变量是在堆中分配的。程序员可以在程序执行的过程中的任何一个时刻手动释放动态变量的空间,不需要等到函数终止时才释放。
用free()函数
- 静态变量时系统自动分配,自动释放的,程序员无法在程序运行的过程中手动分配,也无法在程序运行的过程中手动释放
10、C语言学习的重点
- 1、流程控制
- 2、函数
- 3、指针
- 4、静态内存和动态内存
11、
for(1;2;3)
A;
- 2成立会执行A;
- 3执行完毕会执行2
- A执行完毕会执行3
- 1总共执行1次
12、for(1;2;3)
for(4;5;6)
{
A;
B;
}
C;
- 6执行完毕后会执行5
- 5成立会执行A;
- 5不成立会执行3
- 2不成立会执行C;
- 2成立会执行4
- A和B是否一定会被执行 不一定
- C是否一定会执行 一定
13、
for(1;2;3)
{
while(4)
5;//此处属于while
6;
if(7)
8;//此处属于if
9;
}
10;
- 5执行完后会执行4;
- 如果8是break,则8执行完毕后会执行3;//break;终止的是最里层包裹他的那个循环
- 如果7不成立会执行9;
14、判断
- int* p ; *p = 10;//错,因为p中是一个垃圾地址,不一定属于本程序的内存,相当于用10改变了一个我们不知道的内存中的值
- char*p ;char ch = A; p = &ch;//错,单个字符必须用单引号括起来
- int i,j; i = j = 0; int * p ;p = &i;
- int* p ; int**q; q = &p;
- int* p; int i = 5; p = &i; *p = 10;
15、NULL
二进制全部为零的含义: 00000000000
- 1、数值零
- 2、字符串结束的标记‘\0’
- 空指针NULL
- NULL表示的是零,而这个零不代表数字零,代表的存储地址的变量(即指针变量)中没有存放地址,
计算机中规定了,以零为编号的存储单元的内容不可读,不可写:因为里面存储的是计算机中断向量表的首地地址
- NULL表示的是零,而这个零不代表数字零,代表的存储地址的变量(即指针变量)中没有存放地址,
16、变量的本质
- 变量的本质就是内存中的一段存储空间
17、操作系统回收内存;
程序或软件运行完毕后按操作系统将回收该内存空间(收回的是该内存的使用权限
并不清除该内存中遗留下来的数据,内存中数据只会被覆盖,当我们运行一个程序时,操作系统分配给我们的程序内存时,所以java局部变量定义时要初始化(因为我们定义的变量所关联的那块内存中是有垃圾值的),类中的字段可以不用因为java会给字段赋默认初始值)