指针的基本含义及其用法

1.前言

        在学习C语言的时候,我们会经常接触一个概念,指针和地址,关于这两个概念很多人并不能理解地十分透彻,接下来我将详细介绍一下这两者的概念

2.地址

        我们知道计算机的上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,而内存空间则会进行高效管理,将内存空间划分为一个个的内存单元,而每个内存单元的大小取一个字节。 而一个字节(Byte)等于八个比特位(bit),也就是说,一个字节可以存储八个0和1这样的数据。

        而我们去查找这些储存在内存上的数据的时候,自然是不能从整个内存里面挨个查找的,因为那样效率肯定会十分低下,则这个时候就会用地址去查找了。而地址就类似于你有一个快递,它存放在了菜鸟驿站,到了菜鸟驿站,你是需要向驿站的工作人员提供取件码,然后工作人员根据你提供的取件码找到了你的快递。

        但还有另外一种情况,你去了菜鸟驿站并不知道你的取件码是多少,这时候工作人员会向你索要你的手机尾号,通过查询就得知了你的快递的取件码,这样同样也达到了取到了你的快递的效果。

        这样我们通过上述的概念理解,我们对C语言中取地址符号“&”的理解也就不难了。

举例:

#include<stdio.h>
int main()
{int a=0;scanf("%d",&a);//&即为工作人员通过你的手机尾号查你的取件码的动作,&a即为工作人员查到了你的取件码的这样的一个结果。printf("%d\n",a);//将你的快递拿出来给你看return 0;
}

        在上述的代码中,&a产生了a的地址,我们可不可以把它存起来呢?答案是肯定的。

3.指针

        其实,在C语言中我们可以将内存单元编号,地址和指针看作是等价的。但是常说的指针并不是指针而是指针变量。假如说我们定义了一个int类型的变量a,通过取地址的操作,我们知道了地址为0x009FFD30,这时我们想要把它存起来,那就是存储在指针变量中的。指针变量也是⼀种变量,这种变量就是用来存放地址的,存放在指针变量中的值都会理解为地址。

#include<stdio.h>
int main()
{int a=0;int * pa=&a;//取出a的地址并存储到指针变量pa中return 0;
}

        在上述的代码中,我们看到的pa的类型是int*,这里pa左边写的是int*,*说明pa是指针变量,前面的int是在说明pa指向的整型类型的对象。

图解:

 

4.解引用操作符

        我们将地址保存起来,在后面是要使用的,那怎么使用呢?

        在现实生活中我们通过了地址找到了一个房间,在房间里面可以拿去或者存放物品。通过这个逻辑我们理解C语言中的指针,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针)指向的对象,在这里就可以引入一个操作符叫做解引用操作符(*)。

#include<stdio.h>
int main()
{int a=0;int * pa=&a;*pa-=9;return 0;
}
在上面的代码中第6行就使用了解引用操作符,*pa的意思就是通过pa中存放的地址,找到指向空间,其实*pa就是a变量了,所以*pa=0,这个操作符是把a改成了0。

5.总结

        以上则是关于指针的基本用法的简单介绍了,在C语言中指针扮演者十分重要的作用,内容也是十分的繁杂这里就不再一一赘述了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/678898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++重新入门-循环

目录 1.循环类型 while循环&#xff1a; for循环 基于范围的for循环(C11) do...while 循环 2.循环控制语句 3.无限循环 有的时候&#xff0c;可能需要多次执行同一块代码。一般情况下&#xff0c;语句是顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着…

【洛谷 P1208】[USACO1.3] 混合牛奶 Mixing Milk 题解(贪心算法+向量+结构体排序)

[USACO1.3] 混合牛奶 Mixing Milk 题目描述 由于乳制品产业利润很低&#xff0c;所以降低原材料&#xff08;牛奶&#xff09;价格就变得十分重要。帮助 Marry 乳业找到最优的牛奶采购方案。 Marry 乳业从一些奶农手中采购牛奶&#xff0c;并且每一位奶农为乳制品加工企业提…

AI:126-基于深度学习的人体情绪识别与分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

react函数组件中使用context

效果 1.在父组件中创建一个createcontext并将他导出 import React, { createContext } from react import Bpp from ./Bpp import Cpp from ./Cpp export let MyContext createContext(我是组件B) export let Ccontext createContext(我是组件C)export default function App…

使用client-only 解决组件不兼容SSR问题

目录 前言 一、解决方案 1.基于Nuxt 框架的SSR应用 2.基于vue2框架的应用 3.基于vue3框架的应用 二、总结 往期回顾 前言 最近在我的单页面SSR应用上开发JSON编辑器功能&#xff0c;在引入组件后直接客户端跳转OK&#xff0c;但是在直接加载服务端渲染的时候一直报这…

JavaScript基础第五天

JavaScript 基础第五天 今天我们学习数组&#xff0c;以及数组的增删改查。 1. 数组 数组&#xff1a;(Array)是一种可以按顺序保存数据的数据类型。 1.1. 定义数组 可以使用 const 声明一个方括号**[ ]&#xff0c;或者使用new Array**创建数组。 const array [1, 2, 4…

Netty应用(六) 之 异步 Channel

目录 12.Netty异步的相关概念 12.1 异步编程的概念 12.2 方式1&#xff1a;主线程阻塞&#xff0c;等待异步线程完成调用&#xff0c;然后主线程发起请求IO 12.3 方式2&#xff1a;主线程注册异步线程&#xff0c;异步线程去回调发起请求IO 12.4 细节注释 12.5 异步的好处…

HiveSQL——用户行为路径分析

注&#xff1a;参考文档&#xff1a; SQL之用户行为路径分析--HQL面试题46【拼多多面试题】_路径分析 sql-CSDN博客文章浏览阅读2k次&#xff0c;点赞6次&#xff0c;收藏19次。目录0 问题描述1 数据分析2 小结0 问题描述已知用户行为表 tracking_log&#xff0c; 大概字段有&…

Rust条件语句:if-else表达式详解

在Rust中&#xff0c;条件语句是控制程序流程的重要组成部分。if-else表达式是一种用于根据条件执行不同代码分支的强大工具。本篇博客将深入介绍Rust中的if-else表达式&#xff0c;并通过具体的例子展示其用法和灵活性。 基础用法 fn main() {let number 31;if number <…

多进程服务器和多线程服务器

多进程服务器 #include<myhead.h> #define PORT 9999 //端口号 #define IP "192.168.10.116" //IP地址//定义信号处理函数&#xff0c;用于回收僵尸进程 void handler(int signo) {if(signo SIGCHLD){while(waitpid(-1, NULL, WNOHA…

【MySQL】-20 MySQL综合-6(MySQL创建数据表+MySQL修改数据表+MySQL删除数据表)

MySQL创建数据表MySQL修改数据表MySQL删除数据表 MySQL创建数据表基本语法在指定的数据库中创建表查看表结构 MySQL修改数据表基本语法添加字段修改字段数据类型删除字段修改字段名称修改表名 MySQL删除数据表基本语法删除表 MySQL创建数据表 在创建数据库之后&#xff0c;接下…

2.12作业

程序代码&#xff1a; #include<stdlib.h> #include<string.h> #include<stdio.h>//递归实现n! int n(int element) {if(0element)return 1;return element*n(element-1); }//递归实现0-n的和 int sub_sum(int element) {if(0element)return 0;return eleme…

计算机二级C语言备考学习记录

一、C语言程序的结构 1.程序的构成&#xff0c;main函数和其他函数。 程序是由main函数和其他函数构成main作为主函数&#xff0c;一个C程序里只有一个main函数其他函数可以分为系统函数和用户函数&#xff0c;系统函数为编译系统提供&#xff0c;用户函数由用户自行编写 2.…

《动手学深度学习(PyTorch版)》笔记7.7

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

力扣刷题之旅:高阶篇(一)—— 并查集的应用

在算法的世界中&#xff0c;并查集是一种非常高效且实用的数据结构&#xff0c;常用于处理一些具有连通性质的问题。在力扣&#xff08;LeetCode&#xff09;上&#xff0c;并查集的题目往往涉及到图的连通性、朋友关系的传递性等问题。今天&#xff0c;我们将一起探讨一道关于…

重温阿里云宝塔面板部署前后端项目

首先祝大家新年快乐啊&#xff01; 回到老家&#xff0c;便打算趁这一段空闲时间提升一下自己&#xff0c;重点是学习实践一下echarts相关内容&#xff0c;很多公司项目都需要实现可视化&#xff0c;所以在bilibili上找了黑马的一个教程开始学习&#xff0c;不同的是&#xff…

【JavaScript】遍历对象和数组

文章目录 1. 遍历对象for...in 循环Object.keys()Object.entries() 2. 遍历数组for 循环forEach()for...of 循环 3. 遍历多维数组4. 总结 在 JavaScript 中&#xff0c; 遍历是一种常见的操作&#xff0c;用于访问对象和数组中的元素。本篇博客将将介绍 JavaScript 中遍历对象…

JavaScript进阶教程 - 纯函数和不可变性

在函数式编程范式中&#xff0c;纯函数和不可变性是核心概念&#xff0c;它们有助于编写可预测、易于测试和并发安全的代码。 纯函数&#xff08;Pure Functions&#xff09; 纯函数是这样一种函数&#xff1a;给定相同的输入&#xff0c;总是返回相同的输出&#xff0c;并且…

面试 JavaScript 框架八股文十问十答第九期

面试 JavaScript 框架八股文十问十答第九期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;对象创建的方式有…

Rust标量类型详解

在Rust中&#xff0c;数据类型分为标量类型和复合类型。本篇博客将重点介绍Rust的标量类型&#xff0c;其中包括整数类型、浮点类型、布尔类型以及字符类型。 整数类型 Rust提供了多种整数类型&#xff0c;分为带符号整数和无符号整数。带符号整数表示可以为正数、零或负数&a…