▶️文章目录

✅1.指针的概念

✅2.指针和指针类型

✅3.野指针

✅3.1野指针成因

✅3.2如何规避野指针


1.指针的概念

指针就是地址,口语中说的指针通常指的是指针变量

指针理解的2个要点:

1. 指针是内存中一个最小单元的编号,也就是地址

2. 平时口语中说的指针,通常指的是指指针变量

我们可以通过&(取地址操作符)取出变量的内存其实地址,把地址可以存放到一个变量中

这个变量就是指针变量,是用来存放内存地址的变量

#include <stdio.h>
int main()
{ int a=10;//在内存中开辟一块空间 int*p=&a;//这里我们对变量a,取出它的地址,可以使用&操作符。   //a变量占用4个字节的空间,这里是将a的4个字节的第一个字节的地址存放在p变量中,p就是一个指针变量。 return 0;
}

指针变量的大小:

对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的时候产生高电平(高电压)和低电平(低电压)就是(1或者0);那么32根地址线产生的地址就会是:

00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000001

...

11111111 11111111 11111111 11111111

这里就有2的32次方个地址。

每个地址标识一个字节,那我们就可以给(2^32Byte == 2^32/1024KB == 2^32/1024/1024MB==2^32/1024/1024/1024GB == 4GB)4G的空闲进行编址

总结:

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

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

指针的大小是4或8字节,但是通过指针找到的数据的大小是由指针类型决定的

2.指针和指针类型

指针类型的第一个意义:

指针类型决定了指针在被解引用的时候访问几个字节

int*指针,解引用访问4个字节

char*指针,解引用访问1个字节

可以推广到其它类型

int*指针解引用的访问情况:

如果是int*指针,解引用访问4个字节

char*指针解引用的访问情况:

如果是char*指针,解引用访问1个字节

指针类型的第二个意义:

指针的类型决定了指针向前或者向后走一步有多大(距离)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{int a = 0x11223344;int* pa = &a;char* pc = (char*)&a;printf("%d\n", pa);printf("%d\n", pa+1);printf("%d\n", pc);printf("%d\n", pc+1);return 0;
}

int*指针+1向后走4个字节

char*指针+1向后走1个字节

3.野指针

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

3.1野指针成因

1. 指针未初始化

#include <stdio.h>
int main()
{  int*p;//局部变量指针未初始化,默认为随机值    *p=20; return 0;
}

2. 指针越界访问

#include <stdio.h>
int main()
{    int arr[10] = {0};  int*p=arr;   int i=0;   for(i=0; i<=11; i++) {      //当指针指向的范围超出数组arr的范围时,p就是野指针  *(p++) =i;  }   return 0;
}

3.2如何规避野指针

1. 指针初始化

2. 小心指针越界

3. 指针指向空间释放即使置NULL,0地址是无法访问的

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

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

祝大家520快乐!!!

C语言指针类型的意义相关推荐

  1. C语言中指针类型的意义

    引言: C语言中不同的数据类型其在计算机内部的存储方式不同,占用内存大小也不同,这是我们能看到的给整型.浮点型...这些区分类型的直接原因. 指针有很多类型,但是无论是哪种类型的指针本质上它们的值都是 ...

  2. C语言指针类型 强制转换

    关于C语言指针类型 强制转换  引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...

  3. C语言指针类型和所指数据的类型要一致吗

    C语言指针类型和所指数据的类型必须要一致吗 网上很多答案是:"必须,不一致会出现语法错误",但是 no try no know. 首先看下我的环境: 下面是代码: #include ...

  4. 深入理解C语言指针类型

    C语言指针类型 这部分内容其实很简单,本来不想写的,但是一开始我还真没理解指针类型,所以后来想想还是写一个吧!得了废话少说直接上代码 #include <stdio.h> #include ...

  5. c语言的返回类型是指针变量吗,C语言-指针类型

    改值场景示例 - 改变 n 的值 的函数 void change(int n) { n = 10; } int main() { int a = 20; - 这里只能把 变量a 的值传到 change ...

  6. c语言指针类型占多少字节,关于指针占多少个字节

    开章明义,在32位系统中指针占四个字节: 说道这个问题,学过C语言的都知道,我们在定义一个指针的时候需要说明指针的类型,那么按道理来说,不同类型的指针大小应该不同啊,整形占四个字节,浮点占八个字节,其 ...

  7. C语言 指针 类型的用法大汇总(指针/引用/取值) *与

    今天刚好看汇编需要,就学了学. 本篇文章会不断完善,有疑问,请在评论区留言 对星号 * 的总结 1.表示乘法,例如int a = 3, b = 5, c; c = a * b;,这是最容易理解的. 2 ...

  8. c语言定义node类型指针,C语言指针的概念

    在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍.为了正确地访问 ...

  9. (C语言)指针初识(1)——指针概念及指针类型

    指针,看似是一个令人头疼的问题,静下心来慢慢学习.指针这个主题,分成了几个的板块,比较多,耐心看完,一定会有收获啦!慢慢来,总是需要一个循序渐进的过程. 目录 一.什么是指针 二.指针和指针类型 指针 ...

最新文章

  1. 入职大厂,我容易吗?
  2. 机器学习的发展和硬件发展的关系
  3. 孔雀东南飞用mysql存储_PowerDesigner使用建议(完整版) 用实体关系图进行数据库建模...
  4. 重新绑定ItemsSource先设置ItemsSource = null;的原因
  5. 阿里巴巴自研代码管理平台技术解密
  6. stm32不使用外部晶振管脚怎么处理_外部晶体振荡器被旁路的原理和原因
  7. 什么是数字孪生体?来自西门子、PTC、北航的精华观点和实践
  8. 吴恩达深度学习——浅层神经网络
  9. 多个引用类型的变量“引用”同一个对象意味着什么
  10. 自定义list-style的兼容性问题解决办法
  11. Luogu2730 魔板 Magic Squares
  12. 智能电视linux刷安卓,智能电视安卓盒子刷机ROOT成砖的解决办法
  13. java 校验银行卡号_Java之——基于Luhn算法的银行卡卡号的格式校验
  14. 未能创建 SSL/TLS 安全通道解决方案
  15. 面试积累——嵌入式软件工程师面试题(非常经典)
  16. 黑苹果macOS机型对照表
  17. leetcode-881 救生艇
  18. 我们这一代人的困惑 --转自于宙TEDx大会上的演讲
  19. 尚驰SHANGCHI洗车店兰州汽车美容店私人定制洗车服务 杜绝难看的洗车纹!
  20. 《Python语言程序设计》王恺 王志 机械工业出版社 第四章 面向对象 课后习题答案

热门文章

  1. c/c++位操作简介--移位、位与、位或、异或
  2. 服务器光盘拷贝文件夹,如何光盘path中的两个点的文件夹
  3. Python通过selenium与ddddocr库识别验证码的爆破小脚本
  4. oracle的账户无法注册表,oracle用户账号在哪注册表ORA-12514问题解决
  5. eBPF动手实践系列一:解构内核源码eBPF样例编译过程
  6. 中国移动物联网连接规模超6000万
  7. flex布局强制换行(flex-wrap:wrap)之后,去掉最下面一层多余的间隙。
  8. RIO10数据集下载链接提取
  9. trs 同步模版 栏目修改(高级)
  10. 期末小结(一). 专业技术