回顾指针,别有一番风情

一、定义

指针和其他变量一样也要在内存中分配一段地址,唯一不同就是指针存的是其他变量的在内存中的分
配地址的首地址(这里的其他变量可以是一般变量,也可以是指针),而一般变量存的是数值,所以
把指针当一般变量来看就好。

二、注意事项

声明指针变量一定要初始化,要成好习惯。一般初始化为NULL,即指向地址为0的内存,也就是空指
针。一般变量声明不初始化,系统会分配随机值(垃圾值),而指针变量声明不初始化,系统则会分配
一个随机的地址,假如随机地址是正在使用的某个关键地址,然后我们对这个地址指向的值进行改变,
会造不可预估的失误,而这种bug查找起来很麻烦。我们没办法掌控运气,但我们可以脚踏实地去正确
做人做事,功到自然成。所以养成一个好习惯非常重要!!!

三、一级指针

int a = 10;
int *p1 = NULL;//指针初始化
p1 = &a;//把整型变量a的地址赋值给p1(&这里是取地址的意思)
*p1 = a;//(*这里是解引用的意思)

p1是指向整型变量a地址的指针,简称整型指针

四、多级指针

简单来说,就是现在指针不存一般变量的地址了,存某个指针变量的地址

int a = 10;
int *p1 = NULL;
int *p2 = NULL;
p1 = &a;
p2 = &p1;
*p1 = a;
*p2 = p1;
**p2 = a;

p2是指向指针p1地址的指针,而p1是指向整型变量a地址的指针

五、区分复杂指针类型

判断复杂指针类型,看最右边

六、指针数组

本质还是数组,数组元素变成了指针变量

int *a[10];

1、a是一个数组
2、数组元素的指针
3、a是一个数组长度为10,数组元素为10个指向整型变量的指针的数组

七、数组指针

本质是指针,此时指针指向的的地址是数组的首地址

int (*a)[10];

a是一个指向地址是一个数组长度为10,数组元素为整型变量的整型数组的首地址的指针

八、指针函数

本质是函数,返回类型是指针的函数

int *f(int b);
int num = 1;
int *ptr = NULL;
ptr = f(num);

只有函数名,表示函数的入口地址;如果函数名后带(),则表示调用该函数

f是一个返回类型是整型指针,函数参数为整型的函数

九、函数指针

本质是指针,该指针变量指向的是函数入口地址

int (*f)(int b);//声明一个函数指针
int g(int b);//声明一个普通函数
f = g;//把函数g的首地址赋值给f(也可以写成 f = &g, 取地址运算符&不是必需的)
int sum = 0;
sum = f(1);//调用函数
sum = (*f)(1);//调用函数
两种调用都可以

f是指向一个函数参数是整型变量,返回类型是整型变量的函数入口地址的指针

十、指针常量与常量指针识别技巧

const*的右边就是常量指针,在*的左边就是指针常量

十一、指针常量

地址不变

本质是常量,就和整型常量、字符常量等一样,变量的存的值声明赋值以后,就不能改变。
我们知道指针变量存的值是地址,也就是说这个指针变量不能改变它的指向地址。

int *const p

十二、常量指针

地址存的值不变

本质是指针,此时指针指向的值是常量

const int *p;
int const *p;

十三、举例

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoduangg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值