ahsdia
ahsdia
除了数组,类,string其余都是值类型。
值类型和引用类型://枚举对应数字,是一个值类型
值类型(整数 bool struct(结构体) char 小数)
引用类型(string 数组 自定义的类 内置类)
值类型只需要一段单独的内存,用于存储实际的数据,(单独定义的时候放在栈中)
引用类型需要两段内存
第一段存储实际的数据,它总是位于堆中
第二段是一个引用,指向数据在堆中的存放位置(这个引用指的是它的内存地址)
变量名是我们在程序当中使用的
实际使用时每个变量名都会转换成一个内存地址的
整数数组保存在堆里,栈里存在它的内存地址。
每个字符串本质上都是一个常量,都存储在静态存储区内,如(字符串数组、new类的字符串类型参数)都保存在静态存储区。
字符串数组、new类的字符串类型参数,实际上是栈(内存地址)→堆(内存地址)→静态存储区内数据。
为什么string要放在静态存储区,因为每个字符串都是一个常量,不可被修改。更改字符串类型赋值时实际上是修改了该变量栈内指向静态存储区的内存地址。
静态存储区
字符串是引用类型的,存储的时候会把地址存放在栈中,内容先存放在静态存储区中,在对字符串进行2次赋值(修改)时,静态存储区会先存放新的内容,只是修改字符串的地址,最后存入堆
当对2个字符串进行赋值的时候先把地址存入栈,将内容存入静态存储区然后他们的地址相同
值传递和引用传递。