指针1

指针

地址:用来区分不同内存空间的一个编号

指针:指针就是地址,地址就是指针,指针多了指向的概念

指针变量:一个用来存放指针(地址)的变量

指针相关运算符

&:获得变量在内存的首地址

  1. &取地址,只能对变量操作
  2. &运算符链接表达式的结果为该变量在内存空间的首地址
  3. &运算符会让类型升级 int -> int* char-> char

* 间接访问操作符

*左值 :将右值放入指针指向的空间;*右值:取地址对应空间的值;

*p = 100; // 左值 * p //右值 num = *p //右值

  1. *运算符让类型降级 int *-> int char * -> char
  2. 对int * *获得该运算符开始向下4字节空间,对char * *获得该运算符开始向下1字节空间。
  3. 只能对指针进行 * 操作

如果* 和& 同时出现,等价于去掉 这两个运算符后的结果

指针变量的定义

int *a; *a = 12;不能这样操作,a的初始值会是个非法地址。

int b= 12; int *a = &b;

等价于 int *a= NULL; p = &b;

在64位操作系统中,所有指针均占8个字节; int * 指向4字节空间

野指针 :未经初始化的指针或指向已经被释放过空间的指针。

不要使用未经初始化的指针

NULL :空指针 指向内存地址为0x0的指针

指针的算数运算

++ :向内存高地址偏移指向数据类型大小个字节空间

-- :向内存低地址偏移指向数据类型大小个字节空间

两个相同类型的指针相减,获得两个地址中间相差了多少个该类型的元素

*p++ 先取 *p 然后 p+ +;

(*p)++ 先取 *p 然后 (* p)+ +;

指针变量本身,也就是p,修改p的值改变指针的指向

指针变量指向的空间 也就是 *p,修改这个值改变的是指针指向空间的值

指针作为函数传参

1.值传递 :实参传值给形参,形参改变,实参不会受影响

2.地址传递:实参将地址给形参,形参是实参的指针,可以通过对形参取 * 改变实参的值

数组与指针的关系

int a[5] = {1,2,4,5}; a = &a[0];

数组的数组名是指向数组第一个元素的指针常量, int* const a 不能改变指向。

int *p = a;

访问数组下标为n的元素a[n] == *(a+n) == *(p + n) == p[n]

指针[偏移量] == *(指针+偏移量)

但此时sizeof(a) 与 sizeof(p) 大小不一样

sizeof(a)返回的是整个数组的字节数 ad的大小是16个字节

sizeof(p) 返回的是指针的大小 8个字节

使用数组传参时

fun(arr[])   sizeof(arr) = 8

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值