我们今天来学习指针
内存;程序运行过程中,可以访问到的内存储存空间,计算机为了方便内存,一字节为单位,堆内存进行编号
地址:计算机管理内存是,给内存的编号
指针;指针即为地址,地址即为指针,指针指向了一个具体空间
指针变量;变量,保地址的变量,需要占用内存空间
··1.指针基础
1.指针变量的定义
基类型*变量名 基类型;该指针指向的空间存储的数据类型 int float double void 构造类型 *;类型说明符,说明后面的变量是一个指针 变量名;遵循标识符的命名规则 习惯用 p 开头 int*pmax char*ptmpsizeof(pmax)sizeof()
64位占八个bit
32 四
指针变相保存的地址是目标的首地址
2.指针变量初始化和复制
野指针;指针刚开始没有初始化,或者指向一个已经释放的空间的指针(有风险)
避免野指针;那我们就可以给指针进行初始化 {给指针初始化为null} int * p=null;
或者给指针进行初始化
3.指针运算符
* ——————指针运算符
用来访问指针变量的内存空间中的数据
*指针变量------》指针降级为基类型普通变量
1.*指针运算符 只能发拿工资啊指针变量前面
2.*指针变量,访问指针变量指向的数据,
3.*指针变量,访问的字节数取决于该指针的基类型
p=&num
printf(“%d”,*p)
&——————取地址运算符
& 变量名(获取某个变量首地址)
1.&只能给变量取地址,不能给常量或者表达式取地址
2.&给某个变量取地址时,获取的是这个变量首字节的地址
4.指针算术运算
+ - * / % ++ ---指针1-指针2 表示两个元素之间的元素个数(地址之间字节差/基类型)
++指针+1;表示从当前地址向后偏移sizeof(基类型)字节
--指针-1
5.指针作为函数参数
1.被调函数中,想要修主调函数中定义的变量,传递该变量的地址;
2.被调函数想要返回多个结果是,可以传递主调函数定义的变量地址,地址指向的空间可以保存被调函数被调的结果
6.指针和一位整形数组的关系
数组的数组名位数组的首元素地址
注意
1.数组名为地址常量(右值)可以赋值给别人,但是不能被赋值。
===>&a[0]
a[0] ---->*a
a[1] ---->*(a+1)
a[2] ---->*(a+2)
a[n] ---->*(a+n)
一维整形数组作为函数参数传递:
void print_array(int a[], int len)
{}
void print_array(int *pa, int len)
{}