初步了解指针

1.指针是什么

在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
假设内存块为一栋大楼,每个内存单元为一间房子,每个指针就好比每间房子的门牌号,我们通过门牌号找到相应的房子,同理,我们可以通过指针找到相应的内存单元。

#include <stdio.h>
int main()
{int a = 10;
printf("%d\n",a);//在内存中开辟一块空间
int *p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符。//**将a的地址存放在p变量中,p就是一个之指针变量**。*p=2;//*+指针表示解引用,相当于通过指针找到a这块内存单元printf("%d\n",a);
return 0;
}

总结:指针是一个变量,是用于存储地址的变量

2指针的有多大

在32位机器上,指针总是由32个0或1组成,所以指针的大小为8个4个字节,因为每个0或1为一个比特为(bit),每8个比特位为一个字节。
例如:11111111 00000000 00001111 00110011 这是一个指针在32位机器在内存中存储的样子
同理,在64位机器中,指针的大小为8个字节

这时我们就明白:

在32位的机器上,地址是32个0或者1组成二进制序列,那地址就得用4个字节的空间来存储,所
以一个指针变量的大小就应该是4个字节

总结:1.指针的大小在32位机器上固定为4个字节,在64位总是为8个字节
2.指针是存放地址的,地址是 唯一标识的地址所指向的空间
3.指针的类型和含义

变量的都有类型,整形和浮点型等,同样指针也有类型。
指针的定义方式是: type + * 。 其实: char* 类型的指针是为了存放 char 类型变量的地址。 short* 类型的指针是为了存放 short 类型变量的地址。 int* 类型的指针是为了存放int 类型变量的地址。
指针的类型的意义是什么呢?
那么,我们来看下列代码及其运行结果:

int main()
{int i = 0;int *pa = &i;char*pc = (char*)&i;printf("%p\n", pa);//%p是打印地址printf("%p\n", pa + 1);printf("--------------\n");printf("%p\n", pc);printf("%p\n", pc + 1);return 0;
}


得到的结果如上图所示,将i的地址存储在指针intpa,然后将i的地址强制转换为char存储在指针pc中,首先打印出来的pa和pc的地址都相同,但将pa和pc各自+1,pa移动了4个字节,pc移动了一个字节。

总结:指针类型决定了指针向前或向后移动的一步距离有多大;int 型移动4个字节,char型移动1个字节,short型移动两个字节

接下来我们在看一块代码

int main()
{int a = 0x11223344;int *pa = &a;char *pc = (char*)&a;*pc = 0;//通过指针pc访问a,只访问一个字节//通过指针pa访问,访问了4个字节*pa = 0;return 0;
}

我们先将这块代码进行调试,打开内存,然后把指针pc输进去

我们可以看到44 33 22 11 分别各自占一个字节存储在在内存中;在进行调试,如下图:

可见,当我们调试*pc(p表示的是指针的解引用,意思通过指针找到a这块空间)后,内存中只改变一个了字节,接下来,我们在进行调试

调试
pa后,内存中4个字节都变为0;(指针pa和pc存的都是a的地址,它们指向的内存都为i,只是指针pa为int型,指针pc为char型)

总结:指针的类型决定了指针解引用时操作该空间几个字节
4.野指针的产生

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

int main()
{int a;int* pa = &a;return 0;
}

这里的局部变量指针未初始化,默认为随机值,因为a没有初始化的值,所以指针pa指向的内容是随机的,所以指针pa为野指针`

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

因为数组arr初始化为10个元素,但指针*(pa+10)和*(pa+11)在加的过程中超过了数组arr的范围,这两个指针不知到指向哪里,为随机值,所以为野指针。

5.指针与数组
#include <stdio.h>
int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9,0};printf("%p\n", arr);printf("%p\n", &arr[0]);return 0;
}

运行结果是

可见,数组名和数组首元素的地址相同

结论:数组名表示的首元素的地址

初步了解指针------指针的基本概念相关推荐

  1. 对指针的详细认识(一)—— 指针概念+指针类型+野指针+指针运算+二级指针

    文章目录 指针是什么? 指针的定义 指针的大小 指针类型 指针有哪些类型? 指针类型有什么意义? 野指针 野指针的成因 如何避免野指针 指针运算 指针+-整数 指针-指针 指针的关系运算 二级指针 指 ...

  2. c语言使用node类型指针,C语言利用 void 类型指针实现面向对象类概念与抽象

    不使用C++时,很多C语言新手可能认为C语言缺乏了面向对象和抽象性,事实上,C语言通过某种组合方式,可以间接性的实现面对对象和抽象. 不过多态和继承这种实现,就有点小麻烦,但是依然可以实现. 核心: ...

  3. C ++ 指针 | 指针的详细概念和使用_1

    目录 指针 指针取值 指针 指针是存储其他变量地址的变量,内存地址可以用C ++访问. int a = 54; 54 是变量的值,换句话说,它是存储在称为 "a" 的变量保留的位置 ...

  4. 指针||指针和数组||指针和函数||指针、数组、函数 案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排序

    指针 指针的基本概念 指针的作用: 可以通过指针间接访问内存 内存编号是从0开始记录的,一般用十六进制数字表示 可以利用指针变量保存地址 指针变量的定义和使用 指针变量定义语法: 数据类型 * 变量名 ...

  5. C_C++指针指针应用详解

    前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其 ...

  6. 「C语言」指针数组 数组指针 指针函数 函数指针

    相信很多人和我一样,有着这样的恐惧,那就是这四个玩意怎么也分不清,这都是啥啥啥啥呢?今天我们来具体分析一下.其实要具体了解这四个概念,只需要了解符号优先级,并关注最后两字,你就成功了一半. 符号优先级 ...

  7. 指针数组 数组指针 函数指针 指针函数

    目录 数组指针 指针数组 函数指针 指针函数 数组指针 数组指针的本质: 它是一个指针,指向的是一个数组 数组指针定义: int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一 ...

  8. 【C基础】指针/指针运算/二级指针/函数指针

    指针定义: 指针是一种数据类型,使用它可以用来定义指针变量,指针变量中存储的其实是整数,这种整数代表了内存的编号. 指针的使用: 1.函数之间相独立,但有些时候需要共享变量.传参是值传递全局变量容易命 ...

  9. 面试准备每日五题:C++(六)——CC++、staticconstextern、sizeof strlen、指针引用、数组指针指针数组函数指针

    文章目录 一.C和C++的区别是什么? 二.关键字static.const.extern作用 三.sizeof和strlen的区别 四.指针和引用的区别 五 .指针数组.数组指针.函数指针 一.C和C ...

  10. c/c++教程 - 1.9 指针 空指针 野指针 const修饰指针 指针常量 常量指针 指针和数组 指针和函数

    十一.指针 (1)指针的定义和使用 指针的作用:可以通过指针间接访问内存. 参考视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&a ...

最新文章

  1. shell实例第19讲:一个脚本中调用另一个脚本的3种方法
  2. CentOS使用yum安装Docker
  3. mongodb备份恢复,数据导入导出
  4. C语言实现离散余弦变换(DCT)并用MATLAB和Python验证
  5. 深度学习:从MLP到朴素的神经网络
  6. 【整理】强化学习与MDP
  7. 语音识别ASR技术通识
  8. 启动报错 classnofoundexception org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  9. 安卓投屏大师_玩转手机投屏,我推荐三款不一样的投屏工具!
  10. PIE工程师是做什么的
  11. web kettle 数据采集
  12. edm邮件直投_EDM邮件直投专家V3.8.5官方版下载 - 下载吧
  13. 作文 我眼中的计算机1000字,我眼中的自己作文范文1000字(精选6篇)
  14. pdf转图片可调整大小分辨率
  15. Android Studio学习#2
  16. JS逆向寻找生成bid变量的加密算法,一顿操作猛如虎,结果发现原来是混淆代码
  17. 头条是一款遵循材料设计(Material Design)的第三方今日头条客户端, 聚合了新闻/段子/图片/视频/头条号内容, 没有广告, 仅仅只有存粹的阅读, 不断完善中, 采用 MVP + RxJa
  18. python--测试使用不同的方式计算位涡平流项的差异
  19. H5页面新增二维码、条形码扫描识别功能
  20. linux mtr命令安装,如果mtr没在你的机子上安装

热门文章

  1. 2019.04.12 Head First
  2. 十大建立网站的开源程序
  3. 如何有效地用“提问”挖掘客户需求?
  4. ICMP有哪些消息类型?常见的ICMP报文有哪些?
  5. K11974 最简真分数
  6. MVC开发模式环境搭建
  7. dell服务器安装系统不识别键鼠,戴尔电脑八代CPU装win7鼠标键盘不能用|win10改win7鼠标键盘用不了...
  8. 他很惊讶_局座您是来参加云栖大会吗?
  9. python的with open as f
  10. NFT自由人数字艺术藏品有收藏价值吗?