因为要期末考试了,我开始认真学C#,然后在c#的学习视频中居然有数据类型的详细说明,开心到打滚.
数据类型的分类
1. 值类型和引用类型
- 什么是值类型,什么类型属于值类型?
值类型是存储数据本身。 int float 双精度 boolean char 和枚举 - 什么是引用类型,什么类型属于引用类型?
引用类型是存储数据的引用(内存地址)。string Arry 类 对象
看到这里,可能还是很迷糊。在知道cpu和内存,内存的分配之后呢,就会清晰很多。
2.cpu是什么?
百度上有,我就不写了。
3.内存是什么
cpu与其他外部存储器交换数据的桥梁。用于存储正在执行的程序与数据,即数据必须加载到内存中才能被cpu处理。
4. 内存的分配
一整块内存分为栈区和堆区
- 栈区的特点
空间小(1mb),读取速度快 - 栈区的作用
用于存储正在执行的方法,分配的空间叫做栈帧。栈帧中存储方法的参数以及变量等数据。方法执行完毕之后,对应的栈帧将被删除。(它被删了,没了,别想着它了) - 堆区的特点
空间大,读取速度慢。(相对与栈区) - 栈区的作用
用于存储引用类型的数据。
以c#语法为例
class Program
{
static void Main(string[] args)
{
int a = 1;//01行
Test01(a);//02行
Console.WriteLine(a);//03行
Console.ReadKey();
}
private static void Test01(int a)
{
a = 2;
}
}
代码执行完毕之后,正确答案是输出1;
以前我还会想 ,是输出1还是2啊。然后视频里老师带着我们画图,我瞬间就理解了。(不许笑我,这么简单的问题还不会。不会就学,现在不是知道了,happy)
当代码运行到02行是,在内存中的分布图如下
方法运行在栈中,所以在在栈区开一块空间,变量的声明也是向内存中开辟一块空间,又因为int是值类型所以a那块地里存的是1,存的是数据
执行到03行是,发现一个方法所以又开辟一块空间 如图
开始运行Test01方法里的代码,我们知道Test01(a),传了一个a,a里面是1吧,所以传递数据也是1.代码在往下走,a=2.即a里面的1,被2覆盖.
代码在往下走,就结束这个方法了.栈中Tes01这块空间就被删了
然后代码在往下执行,从图中就可以很清晰的知道
最后输出a时,a里面的数据是几了