day01- Dive in C

Published: by Creative Commons Licence

1.数组做函数参数,会退化为一个指针,正确的做法是:

int foo01(int a[])错误, int foo02(int *a)正确

把数组内存的首地址传递给函数

写在形参处的数组,如foo01,编译器会把它当成指针处理,只会分配一个首地址 

2.数组a[], a表示数组中第一个元素的地址,+1后移动单位长度,&a表示的是整个数组的长度,+1后移动整个数组的长度(单位大小*元素个数)

3.无类型指针操作数据的时候不考虑所操作的数据类型

4.修改数据是通过变量修改内存的数据,内存四区

5.栈内存放子函数,用完清空内存,堆内存放malloc申请的,由操作系统或者程序员free,不会清空.全局区同上图.

6.函数调用模型

6.从左向右横向看,是一个stack,先进的函数后清空数据,如图.每一个程序只有一个堆栈,一个exe文件中

7.指针*的含义

 

  

常量区数据不能被修改,如果通过指针强行修改,就会出错.程序无法运行,含义5