(一)看了半天,觉得最有价值的地方莫过于是数据的存储和字符类型和指针之间的混沌关系
#数据存储:
1.1栈区:编译器在需要的时候分配,不需要的时候回收(一般变量的生命周期到外面的"}"为止),它的内存空间相对于堆来说,要小很多(比如申请int A[10000000000000],编译器就会报错),但是好在执行效率高,因为malloc/new都是要通过复杂的算法才可以申请到空间,花费了一定的时间,更不用说还有delete/free了
1.2堆区:堆并不是一无是处,相反,它拥有较大的内存空间,相对栈来说可以存储大量数据
1.3全局区,静态区:全局变量和静态局部变量都放在这里,带到程序结束时,一同释放
1.4常量储存区:顾名思义,这里储存不允许修改的常量,数据,字符串,指针等等,程序结束时释放
1.5程序代码区存放二进制函数代码
#char和字符串(常量)之间~~“难以理解♂”~~ 的关系
char和char[]之间的区别,超过你的想象
前者是定义一个char的指针你比如:
char* a="hello world";
a[0]='H'
就会报错,提示为:不可以被written,因为char* a只是个指针,他不知道这个长度有多大,但是如果这样写:
char a[]="hello world";
a[0]="H"
就没有任何问题,这是常规操作
如果这样写:
char a[]="hello world";
char *A=a;
A[0]="H" //知道了大小后,访问就不存在问题了,编译通过