指针,动态内存分配

目录

什么是指针

指针重要性

 指针的定义

​指针的分类,指针和

基本类型指针 

星号的含义

形参实参 

​指针和数组

指针和一维数组

指针变量的运算 

一个指针变量到底站占几个字节

指针和二维数组

动态内存分配

传统数组的缺点

为什么需要动态内存分配 

malloc free 

 动态一维数组构造

 动态内存静态内存的比较

多级指针

 跨函数使用内存


什么是指针

指针就是地址,地址就是内存单元的编号

指针变量,存放其他变量地址的变量 ,存放地址的变量

指针,动态内存分配_第1张图片

指针,动态内存分配_第2张图片

第2句话,修改i的值也不影响p的值,可以看下面的例子,p放的是地址,p的地址修改了,不影响i,不是修改*p

指针,动态内存分配_第3张图片指针,动态内存分配_第4张图片

指针,动态内存分配_第5张图片

指针,动态内存分配_第6张图片

指针重要性

指针,动态内存分配_第7张图片

 指针的定义

指针,动态内存分配_第8张图片

指针,动态内存分配_第9张图片

指针,动态内存分配_第10张图片

指针,动态内存分配_第11张图片 指针的分类,指针和

指针,动态内存分配_第12张图片

基本类型指针 

 指针,动态内存分配_第13张图片

指针,动态内存分配_第14张图片

指针,动态内存分配_第15张图片

 指针,动态内存分配_第16张图片指针,动态内存分配_第17张图片

星号的含义

指针,动态内存分配_第18张图片

形参实参 

执行swap_1时,第一步先为它里面的局部变量分配存储空间,第二步把实参的值发送给形参,这意味着i和a是不同的变量,当swap_1执行完毕后,swap_1中所有变量的空间全部被释放了

指针,动态内存分配_第19张图片

指针和数组

指针和一维数组

指针,动态内存分配_第20张图片

指针,动态内存分配_第21张图片

指针,动态内存分配_第22张图片

指针,动态内存分配_第23张图片

指针变量的运算 

指针,动态内存分配_第24张图片

一个指针变量到底站占几个字节

 ​​​

指针,动态内存分配_第25张图片

指针,动态内存分配_第26张图片

指针,动态内存分配_第27张图片

p,q,r都存放第一个字节的地址。

那为什么存放第一个字节的地址,我们说r存放x的地址,r就指向x,但r又保存了第一个字节的地址,那严格来说r只能指向第一个字节,那为什么*r是x呢?这是一个矛盾的地方。比如一个变量占四个字节,我们不能说把这四个字节的地址都保存起来,我们只保存第一个字节的编号。

我怎么知道r是指向的从这开始的8个字节,这是靠变量类型,p,q,r都存放一个字节的地址,但总体长度是几,是靠前面的类型决定的。所以r就指向了x,*r就是x

p,q,r都存放一个字节的地址,但p,q,r却占四个字节呢?这说明地址或者说编号占四个字节,为什么四个?

指针,动态内存分配_第28张图片(地址编号)

一共32个零,每个单元四个字节(32位),无论是第几个地址编号都要用四个字节保存

指针和二维数组

动态内存分配

指针,动态内存分配_第29张图片

传统数组的缺点

指针,动态内存分配_第30张图片

指针,动态内存分配_第31张图片

指针,动态内存分配_第32张图片

为什么需要动态内存分配 

指针,动态内存分配_第33张图片

malloc free 

指针,动态内存分配_第34张图片

 分配了四个字节,只返回第一个字节的地址,第一个字节的地址到底是什么类型的地址?那指向他的变量占几个字节?

第一个字节的地址本身不能确定指向它的变量占几个字节,所以前面需要强制类型转换

表示把第一个字节的地址强制转换为整型的地址,也就说malloc函数虽然只返回了第一个字节的地址,但第一个字节的地址代表的是一个整型变量的地址,整型变量的地址肯定四个四个划分的。

p只保存了四个字节中第一个字节的地址,因为有强制类型转换,虽然只有一个地址,但它知道是整型的地址,所以四个四个划分,刚好指向这四个字节。

把首字节转换成int*,pArr就指向了第一个元素,指向四个字节

指针,动态内存分配_第35张图片

4表示分配四个字节,但malloc函数只返回了第一个字节的地址,所以需要强制类型转换来告诉别人你这个指向第一个字节的地址的变量到底占几个字节。

malloc分配了四个,p是一个变量,p也有空间,没空间怎么把第一个字节的地址放进去

第一个字节的地址需要几个字节去保存?四个,因为地址,就是内存单元的编号,内存单元的编号由32根地址总线来排列组合的,所以需要四个字节。

指针变量,无论它指向的变量占几个字节,它都占四个字节。

指针,动态内存分配_第36张图片

指针,动态内存分配_第37张图片

指针,动态内存分配_第38张图片

所谓分配就是把这四个字节的使用权限给你,所谓释放就是这四个字节的内存不能使用了,不能写也不能读。

指针,动态内存分配_第39张图片

指针,动态内存分配_第40张图片

指针,动态内存分配_第41张图片

指针,动态内存分配_第42张图片

 动态一维数组构造

指针,动态内存分配_第43张图片

指针,动态内存分配_第44张图片

如果一个指针指向四个字节,加一指向后四个字节

如果一个指针指向100个字节,加一指向后100个字节

指针,动态内存分配_第45张图片

指针,动态内存分配_第46张图片

指针,动态内存分配_第47张图片

指针,动态内存分配_第48张图片

 指针,动态内存分配_第49张图片

 指针,动态内存分配_第50张图片

指针,动态内存分配_第51张图片

指针,动态内存分配_第52张图片

 动态内存静态内存的比较

指针,动态内存分配_第53张图片

多级指针

p是指针变量,是变量一定有地址

指针,动态内存分配_第54张图片

指针,动态内存分配_第55张图片

 指针,动态内存分配_第56张图片

 指针,动态内存分配_第57张图片

指针,动态内存分配_第58张图片

 跨函数使用内存

指针,动态内存分配_第59张图片

指针,动态内存分配_第60张图片

不能再去读写内容。

指针,动态内存分配_第61张图片

你可能感兴趣的:(C基础,c语言)