目录

一、指针是什么

二、指针和指针类型

三、野指针

四、指针运算

五、指针和数组

六、二级指针

七、指针数组


一、指针是什么

在计算机科学中,指针 (Pointer )是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为"指针”。意思是通过它能找到以它为地址的内存单元。

指针理解的2个要点:

1. 指针是内存中一个最小单元的编号,也就是地址。(指针:存放地址的变量)

2. 指针变量:用来存放内存地址的变量。

int main()
{int a=10;int* p=&a; //将a的地址存放在p变量中,p就是一个指针变量return 0;
}

总结:

指针是用来存放地址的,地址是唯一标示一块地址空间的。

指针的大小在32位平台是4个字节,在64位平台是8个字节。


二、指针和指针类型

(一)指针的解引用操作

指针类型决定了指针进行解引用操作的时候,能够访问空间的大小

int* p;   //*p能够访问4个字节

char*  p;  //*p能够访问1个字节

double* p;  //*p能够访问8个字节

(二)指针 + - 整数

int main()
{int a=0x11223344;int* pa=&a;char* pc=&a;printf("%p\n",pa);printf("%p\n",pa+1);printf("%p\n",pc);printf("%p\n",pc+1);return 0;
}

下面是程序的结果:

总结:通过上面的例子,我们可以知道:

指针类型决定了 指针走一步走多远(指针的步长)

int* p;p+1 --> 4(整型指针+1,往后跳4个字节,一个元素占4个字节)

char* p;p+1 --> 1

double* p;p+1 --> 8


三、野指针

野指针:指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

野指针成因

1. 指针未初始化

int main()
{//int a;//局部变量不初始化,默认是随机值int *p; //局部的指针变量,就被初始化随机值*p=20; //内存中随便找了个空间,把20放进去了return 0;
}

2. 指针越界访问

int main()
{int arr[10] = { 0 };int *p = arr; //p指向了这个数组的首元素地址int i=0;for (i=0;i<12;i++){p++;}return 0;
}

3. 指针指向的空间释放

int* test()
{int a = 10; //a是局部变量,出了test函数就没有了return &a;
}
int main()
{int *p=test(); //地址虽然返回来了,但是函数一结束,空间返回给系统*p= 20;  //指向的是一块被释放的空间return O;
}

如何规避野指针

1. 指针初始化

void main
{int a=10;int* p=&a; //初始化int* p=NULL; //当你不知道要赋什么值的时候,可以赋值NULL}

2. 小心指针越界

3. 指针指向空间释放 即 使置NULL

4. 避免返回局部变量的地址

5. 指针使用之前检查有效性


四、指针运算

(一)指针 + - 整数

#include<stdio.h>
int main()
{int arr[10]={1,2,3,4,5,6,7,8,9,10};int i=0;int sz=sizeof(arr)/sizeof(arr[0]);int* p=arr; //数组首元素地址给pfor(i=0;i<sz;i++){printf("%d ",*p); //*p就是第一个元素p=p+1; //也可以写成 p++; 向后跳一个元素指向2,以此类推}return 0;
}
//最终结果为:1 2 3 4 5 6 7 8 9 10

(二)指针 - 指针

地址 - 地址

注意:要指向同一个空间

#include<stdio.h>
int main()
{int arr[10]={1,2,3,4,5,6,7,8,9,10};printf("%d",&arr[9]-&arr[0]); //指针-指针,得到的是中间的元素个数(前提:大地址-小地址)return 0;
}
//最终结果为:9

(三)指针的关系运算

指针的比较大小


五、指针和数组

六、二级指针

指向指针的指针

int main()
{int a=10;int* pa = &a;int** ppa = &pa; //ppa就是二级指针int*** pppa = &ppa; //pppa就是三级指针,以此类推,也能写出四级指针return 0;
}

*ppa = 30;

// 等价于 *pa=30;

// 等价于 a = 30;

七、指针数组

指针数组是数组,是存放指针的数组

数组指针是指针。

int main()
{int a = 10;int b = 20;int c = 30;//int* pa = &a;//int* pb = &b;//int* pc = &c;//指针数组用来存放指针//int arr[10]int* arr2[3] = {&a,&b,&c};       //指针数组(整型指针的数组)for(i=0;i<3;i++){printf("%d ",*(arr2[i]));}return 0;
}
//10 20 30

【C语言-B站鹏哥】初识指针相关推荐

  1. c语言指针和结构体(B站鹏哥讲解版)

    一.指针初阶 1.指针类型决定了:指针解引用的权限有多大. char 型改变两个字节,int改变8个字节. 2.指针类型决定了指针走一步走多远. int加4,char加1,double加8 3. 4. ...

  2. 【鹏哥C语言网课笔记】初识指针

    目录 一.指针是什么? 二.指针和指针类型 三.野指针 指针未初始化 指针越界 指针指向的空间释放 如何规避野指针 四.指针运算 指针+-整数 指针-指针 指针的关系运算 五.指针和数组 六.二级指针 ...

  3. C语言扫雷简化版(b站鹏哥)

    前言 扫雷是大部分C语言学习者初期所遇到的步骤比较繁琐的题目,其代码量较大,大致可以分为三部分.该篇文章较适合于初级程序猿阅览. 系列文章目录 扫雷基本介绍 游戏的头文件(game.h) 游戏界面 初 ...

  4. C语言学习记录——鹏哥二分法查找数组中元素 复习整理

    #include <stdio.h> #include <string.h> int main() {//初始化一维整型数组int arr[10] = { 1,2,3,4,5, ...

  5. 跟着鹏哥学C语言第一天

    学习C语言,在我心中可能是一件从小就向往的事情吧,相信很多人都有这个梦想,比如自己做出一款游戏,自己开发出属于自己的一款APP,是一件多么有成就的事情.但梦想不能只是说说而已,要付出行动,所以我开始在 ...

  6. 【C语言】初识指针(终篇)

    摸了一手秀发,发现还在~ 目录 1.指针运算 1.1指针加减整数 1.2指针减指针 1.3指针关系运算 2.二级指针 3.指针和数组 4.指针数组 前言: 大家好,我是拳击哥.上一期我们讲到了指针类型 ...

  7. [C语言]static关键字--#define 定义常量和宏--初识指针--初识C语言(四)

    文章目录 前言 一,static关键字 二,#define 定义常量和宏 三,初识指针 总结 前言 本节主要记录初识C语言第四节内容. 内容包括:static关键字------#define 定义常量 ...

  8. 【C语言】深入理解数组和指针——初识指针

    哈喽大家好,我是保护小周ღ,C语言,接下来给大家带来的是深入理解数组和指针的初识指针,这篇主要讲的是基础指针的相关知识,是博主的所见所闻,细节上的知识后面会这里面没有提,会放在后期的文章中与数组相结合 ...

  9. 第一天学习b站比特鹏哥的视频

    前段时间听中国大学慕课翁凯老师的c语言,感觉讲的很少,而且我已经大三了,因为专升本的原因,比人家本科生要基础差得多,专科与本科差的绝对不是一张毕业证,更多的是基础,计算机的思想,我要补的东西还有很多, ...

最新文章

  1. 如何利用Tensorflow和OpenCV构建实时对象识别程序?
  2. hbase java 端口_HBase远程Java客户端尝试通过随机端口进行身份验证
  3. python123组合数据类型答案_Python组合数据类型
  4. php 删除数组的空元素,php删除数组空元素的方法_后端开发
  5. Deno + Oak 构建酷炫的 Todo API
  6. aj6 stamps storm_曝光! “渣男”Travis Scott的AJ6下周发售,分手后货量大减...
  7. 如何实现一个HTML5 RPG游戏引擎——第五章,实现人物和人物特效
  8. lduan SCOM 2012 Web控制台(十五)
  9. 总有一种正能量触动你的心灵,读刘丁宁的一封信
  10. 音频降噪-fir滤波器
  11. 记开发过的一款无线音箱解决方案
  12. 微信小程序——微信小程序后台自定义分析,数据准确性分析
  13. 楼氏电子推出Raspberry Pi 开发工具包,为新物联网应用和行业语音整合提供支持
  14. 欺骗的艺术----(8)
  15. 洛谷——P1413 坚果保龄球
  16. 杂文 -- 面试重心
  17. 如何打通AD、企业微信、飞书、钉钉等社交账号及内外网应用身份?
  18. WPF中WindowFormsHost始终置顶的有效解决方案
  19. AppScan扫描报告
  20. linux 中的零拷贝技术,第 2 部分,Linux的零拷贝技术

热门文章

  1. NLP自然语言处理中的文本相似度
  2. html消息页左滑删除模板,基于JS实现移动端左滑删除功能
  3. R语言实战笔记--第八章 OLS回归分析
  4. 京东主图视频用这种方法批量下载速度更快
  5. php 打印函数(echo , print, printf, print_f, var_dump)
  6. FTP、FTPS和SFTP的简介与区别
  7. JBI消息规范-第一部分
  8. 电脑HDMI连接电视,电视声卡被禁用解决方法
  9. linux环境下载云盘资料
  10. 外贸老鸟如何使用领英的技巧方法