什么是指针
指针就是地址,地址就是内存单元的编号
指针变量,存放其他变量地址的变量 ,存放地址的变量
第2句话,修改i的值也不影响p的值,可以看下面的例子,p放的是地址,p的地址修改了,不影响i,不是修改*p
指针重要性
指针的定义
指针的分类,指针和
基本类型指针
星号的含义
形参实参
执行swap_1时,第一步先为它里面的局部变量分配存储空间,第二步把实参的值发送给形参,这意味着i和a是不同的变量,当swap_1执行完毕后,swap_1中所有变量的空间全部被释放了
指针和数组
指针和一维数组
指针变量的运算
一个指针变量到底站占几个字节
p,q,r都存放第一个字节的地址。
那为什么存放第一个字节的地址,我们说r存放x的地址,r就指向x,但r又保存了第一个字节的地址,那严格来说r只能指向第一个字节,那为什么*r是x呢?这是一个矛盾的地方。比如一个变量占四个字节,我们不能说把这四个字节的地址都保存起来,我们只保存第一个字节的编号。
我怎么知道r是指向的从这开始的8个字节,这是靠变量类型,p,q,r都存放一个字节的地址,但总体长度是几,是靠前面的类型决定的。
p,q,r都存放一个字节的地址,但p,q,r却占四个字节呢?这说明地址或者说编号占四个字节,为什么四个?
(地址编号)
一共32个零,每个单元四个字节(32位),无论是第几个地址编号都要用四个字节保存
指针和二维数组
动态内存分配
传统数组的缺点
为什么需要动态内存分配
malloc free
分配了四个字节,只返回第一个字节的地址,第一个字节的地址到底是什么类型的地址?那指向他的变量占几个字节?
第一个字节的地址本身不能确定指向它的变量占几个字节,所以前面需要强制类型转换
表示把第一个字节的地址强制转换为整型的地址,也就说malloc函数虽然只返回了第一个字节的地址,但第一个字节的地址代表的是一个整型变量的地址,整型变量的地址肯定四个四个划分的。
p只保存了四个字节中第一个字节的地址,因为有强制类型转换,虽然只有一个地址,但它知道是整型的地址,所以四个四个划分,刚好指向这四个字节。
4表示分配四个字节,但malloc函数只返回了第一个字节的地址,所以需要强制类型转换来告诉别人你这个指向第一个字节的地址的变量到底占几个字节。
malloc分配了四个,p是一个变量,p也有空间,没空间怎么把第一个字节的地址放进去
第一个字节的地址需要几个字节去保存?四个,因为地址,就是内存单元的编号,内存单元的编号由32根地址总线来排列组合的,所以需要四个字节。
指针变量,无论它指向的变量占几个字节,它都占四个字节。
所谓分配就是把这四个字节的使用权限给你,所谓释放就是这四个字节的内存不能使用了,不能写也不能读。
动态一维数组构造
如果一个指针指向四个字节,加一指向后四个字节
如果一个指针指向100个字节,加一指向后100个字节
动态内存静态内存的比较
多级指针
p是指针变量,是变量一定有地址
跨函数使用内存
不能再去读写内容。