《C/C++ 高级开发 与Linux内核源码探析 提高班(王保明老师)》

视频选集

5/123

数组作为函数参数时,会退化为指针,所以 len = sizeof(a) / sizeof(*a) 获取数组长度不行,在main 函数 是10,调用排序函数里面则为 1 。。。应该传 数组长度 参数 进函数;

编译器会做优化,传参 int a[10] -> int a[] -> int * a,延迟分配内存 —— 这是一维数组,二维数组的推延会复杂得多

思考问题的时候,从C/C++ 编译器的视角思考问题;会提升一个档次 

 

 

&a 和 a 的数据类型不一样;

数据类型分:简单类型 和 复杂类型,不能用简单类型的思路去思考复杂类型;

int a:编译器帮我分配4个字节的内存

int a[10]:编译器我分配4*10个字节的内存

Java 程序员只面向 业务流,C++程序员除了业务流,还要面向操作系统

学不好内存,学不好指针——指针是为内存服务的 

  

 

 

 https://www.bilibili.com/video/BV1M4411479m?p=6

 

 第三种方法:C++里面的引用

 字符串首地址,32位下是4个字节;赋值给 char c(1个字节),装不下 ... 

 内存四区模型:

 

 C++编译器:

自动做优化,字符串相同,则不重复分配内存,复用字符串头指针

 

 

 

Debug 出不来,Release 出来了;

 指针变量和它所指向的内存空间变量是两个不同的概念

没有内存,哪来的指针

 

 

 

 

stack:开口向下

int a; int b;

&b 的地址更小 

 

malloc 向上 

存放数据的方向始终是向上的:stack 先向下生成,分配内存空间,内存空间中存放数据,则往上顺次放

   

原文地址:https://www.cnblogs.com/cx2016/p/13084337.html