首页 > 其他分享 >愿带你拿捏指针(1)

愿带你拿捏指针(1)

时间:2024-06-14 22:57:40浏览次数:27  
标签:int 拿捏 地址 内存 数组 类型 愿带 指针

前面带你们讲了讲函数,接下来带大家学习一下指针。

从这三方面带大家认识指针。

一.什么是指针

我们前面说过整形,整形是存放整数的,那指针是存放什么的呢?我们往下看

1.内存和地址

我们知道在一个小区里面找到一个人的家需要知道人家再几栋几单元几零几,

那我们怎么再计算机中找到我们的整形呢?

这些整形,浮点型数据存放在哪里呢?

其实这些整形变量都有它的位置,我们叫做它地址。

而地址存放在内存当中。

(1)内存

内存的单位是内存单元,1个内存单元占1个字节也就是8个比特位

1个比特位存放一个二进制1或者0

1个字节(byte)内存放8个比特位(bit)

再vs中分x64(64位平台)和x86(32位平台)

这两个区别就是内存大小不同

我们知道每个房间都有房间号便于找到位置,一般有多少门牌号就有多少房间

内存被内存单元标记,

64平台就相与内存单元有2^64个,32平台就相当于内存单元有2^32个。

(2)地址

那地址又是什么呢?

内存相当于一栋楼,而内存单元相当于每个房间,地址相当于每个房间的房间号。

如果再32位平台,第一个内存单元如果用二进制的地址标记一个内存单元标记是下面这样

这样标记很麻烦,所以地址不这么标记而是像下面这样

地址将以16进制的形式记录一个字节或一个内存单元位置,如下

再32平台下,1个内存单位的地址的大小是4个字节,也就是32个比特位

再62平台下,1个内存单位的地址的大小是8个字节,也就是64个比特位

为了让你能更好的理解内存,内存单位和地址看下面的图片。

(2)指针和地址

说了那么半天的地址,那地址和指针有什么关系呢?

 前面我说到整形变量的存储其实就是放在内存单元(字节)的,我们知道vs上整形占4个字节

也就是4个内存单元,这4个字节(内存单元)都有它的地址,指向着这个地址叫做指针。

可以说指针就是地址,地址就是指针。

二.指针的样子

前面说过指针是存放某某(各种类型)地址,所以指针和它存放的类型有关

如何拿到整形的地址呢?

我们需要了解一个操作符

1.取地址操作符(&)

取地址操作符听名字就知道是,取出地址的符号

还记得我们前面的scanf(库函数),头文件是stdio.h

这个函数为了输入某类型的值

大家应该了解了取地址操作符

2.指针的样子

先让大家了解指针的样子后面会详细说的

先看看存放整形(int)样子

再看看存放字符(char)样子

如果是想要int类型的指针就用int *类型的指针接收,

是char类型的指针就用char *类型的指针接收

三.指针的类型

指针存放的是某某类型的地址,存什么类型就是什么类型的指针

1.某某类型指针

(为了了解后面会一个一个讲)

(1)整形指针

比如上面所见到的整形指针(指针指向的整形),也可以说指针存放的类型是整形的地址

我们前面还讲过浮点型,字符型这两个和上面的相似。

———————————————————————————————————————————

除了这些类型,前面我们还提到过数组,函数是不是还有数组指针,和函数指针呢?

答案是是的

(2)数组指针和指针数组

提到数组指针多数都是离不开指针数组的

数组指针

数组指针离不开本质指针指向的数组,也就是说指针存放的是数组的地址。

arr类型是int [10]

p的类型是int  (*)  [10]

所以int 先与[10]结合再赋予指针,这样就是数组指针

指针数组

指针数组离不开本质数组里面的元素是指针

p的类型是int  *  [5]

所以int 先与  *  结合再赋予数组,这样就是指针数组

(3)函数指针和函数的返回类型是指针

函数指针

函数指针本质是指针(指向的是函数),也就是说存放指针的地址

fun的类型是int  (int,int)

p类型是int (*) (int,int)

这个就是和上面的相似,能理解它是函数指针吧

返回类型是指针的函数

这个就比较好理解了函数返回类型是指针也就是地址

这个比较好理解了

fun两个参数是(int,int)返回值是int*

2.void*类型的指针

表示无具体类型的指针

void*类型的指针可以接受任意类型的地址,但是无法直接的进行计算

如果需要进行计算,需要强制类型转化,使得可以一个函数可以处理多个数据

3.const修饰的指针变量

conse修饰指针变量不能被修改,具体后面会讲的先明白有这个东西

4.野指针

野指针就是没有固定位置的或者说没有具体地址的指针,地址是随机变化的指针,这样的指针

用起来很危险,因为不知道它的位置

(1)野指针的成因是指针变量没初始化(没存放地址)

这样的p就是野指针

———————————————————————————————————————————

今天就了解这些,下次带大家继续了解,

会以指针变量的解引用操作,const修饰的变量,指针变量的运算,使用指针变量的好处等等。

标签:int,拿捏,地址,内存,数组,类型,愿带,指针
From: https://blog.csdn.net/huiyi_jiu_shiyi/article/details/139663208

相关文章

  • 智能指针的思路
    目录前言一、智能指针是什么?二、智能指针代码步骤1.创建一个基本的类,这个类有你想实现的功能2.智能指针类3.整体代码总结前言    在日常的类应用场景中,我们会很多时候涉及到申请内存new关键词和清空内存delete的使用,而我们在很多时候会在申请内存后,忘记......
  • 二进制翻转、结构体指针
    试写一个函数,传入一个参数unsignedcharnum,把num按位进行整个数值翻转。规则:使用位运算,不能另外使用变量存储,写出最优的方案。例:num二进制为10010111;翻转后num二进制是11101001unsignedcharreverseBitsChar(unsignedcharch){    ch=(ch&0x55)<<1|(ch>>1)......
  • AI “黏土画风”轻松拿捏,手把手带你云端部署 ComfyUI
    作者:鸥弋、筱姜AI绘画领域,StableDiffusionWebUI、Midjourney、DALL-E都聚拢了一大批的应用开发者和艺术创作者。ComfyUI出现时间略晚,但是它让创作者通过工作流的方式,实现自动化水平更高的AI生图流程,一面世就以强劲势头脱颖而出,在WebUI领域开创了全新的篇章。目前Comf......
  • 6.12.双指针专题
    27.移除元素题意描述:给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。假设nums中不等于val的元素数量为k,要通过此题,您需要执行以下操作:更改nums数组,使nums的前k个......
  • 032指针学习—引用字符串
    目录1.字符串的引用方式(1)两种方法(2)举例(3)注意事项2.字符指针作函数参数(1)说明(2)举例(3)注意事项3.用字符指针变量和字符数组的比较1.字符串的引用方式(1)两种方法        用字符数组存放一个字符串,可以通过数组名和下标引用字符串中一个字符,也可以通过数组名和格......
  • C语言指针介绍加练习
    #指针相关介绍定义    指针(Pointer),通常用于数据的间接访问,指针存储的是指向变量的首地址,16位平台就是2位,如果在32位平台,地址就是4个字节,如果实在64位平台,地址就是8个字节(1Byte=8bit),Int类型4Byte char类型1Byte这个是变量在内存中,分配的地址大小,在内存中一个By......
  • 指针和数组-1
    目录1、指针的算术运算指针加上整数:指针减去整数:两个指针相减:2、指针用于数组处理1.访问数组元素:2.遍历数组:3.修改数组元素:​ 4.传递数组到函数:​5.动态内存分配(先了解后面章节会详解):3、指针比较1.检查两个指针是否相等2.检查一个指针是否在另一个之前或之后......
  • Go语言什么时候该使用指针 与 指针使用分析
    Go语言什么时候该使用指针与指针使用分析原创 疯子 Go语言圈 2024-06-1208:31 广东Go语言圈Go语言开发者的学习好助手,分享Go语言知识,技术技巧,学习与交流Go语言开发经验,互动才有助于技术的提升,每天5分钟,助你GO语言技术快乐成长161篇原创内容公众号......
  • CH07_指针
    CH07_指针指针的基本概念作用:可以通过指针间接访问内存描述:内存编号是从0开始记录的,一般用十六进制数字表示可以利用指针变量保存地址指针变量的定义和使用语法:数据类型*变量名;示例:#include<iostream>usingnamespacestd;intmain(){ inta=10; //定义......
  • C语言指针(函数指针的深入)
    在函数指针进阶中初步接触了函数指针现在来深度学习一下我们来分析两个题目加深一下对函数指针的理解例1:(*(void(*)())0)();分析这个函数的作用是什么?看到这段语句这么长是不是觉得很难,在我分析了之后就会变得非常简单分析之前我们先讲解一下C声明的组成任何C变量的声......