C指针介绍(1)

news2025/5/25 11:00:42

文章目录

  • 每日一言
  • 指针的简单介绍
  • 内存和地址
  • 指针在内存中的存储
  • 指针的定义和声明
    • 泛型指针
  • 指针的关系运算
    • 算数运算
    • 关系运算
  • 结语

每日一言

⭐「 一声梧叶一声秋,一点芭蕉一点愁,三更归梦三更后。 」–水仙子·夜雨-徐再思


指针的简单介绍

C语言指针是C语言中一种非常重要的数据类型,它可以存储内存地址,通过操作指针可以实现对内存中数据的直接访问和修改。C语言指针的使用是C语言高级特性的一个重要组成部分,也是C语言程序员必须掌握的基本知识之一。指针在C语言中广泛用于数据结构、动态存储分配、函数指针等方面。本系列将介绍指针的基本概念、指针的定义和声明、指针的运算、指针和数组、指针和函数等内容,帮助读者理解C语言指针。

内存和地址

在讲指针之前,首先要先了解内存和地址。

内存是计算机中用来存储数据和程序的部件,它被分成了许多个存储单元,每个存储单元都有一个唯一的地址用来访问它。在程序运行时,数据会被加载到内存中,程序也会在内存中执行。

地址是内存中每个存储单元的唯一标识符,它用来定位并访问内存中的数据。每个地址都是一个数字或一组数字,它们按照一定的顺序排列,可以被用来读取或写入内存中的数据。

指针在内存中的存储

指针是一个变量,它存储了一个地址,这个地址指向内存中的某个位置。在内存中,每个变量占用一段连续的空间,这段空间的大小取决于变量的类型。指针所占用的空间大小通常是固定的,例如在32位操作系统上,指针的大小通常是4字节,而在64位操作系统上,指针的大小通常是8字节。

当声明一个指针变量时,计算机会为这个指针分配一段内存,这段内存的大小是固定的,并且与指针的类型相关。例如,如果声明一个int类型的指针变量,那么计算机会为这个指针分配4/8字节的内存空间。

ps:
在32位系统下:int占4个字节
在64位系统下:int占8个字节

当指针被赋值时,它会存储一个内存地址,这个地址指向某个变量或对象的内存空间。当使用指针访问该变量或对象时,计算机会将该地址解引用,得到指向内存中实际变量或对象的指针,然后就可以对其进行操作或读取其值。

指针的定义和声明

指针是一个变量,其值表示另一个变量的地址。指针可以用来访问、修改另一个变量的值。

指针的声明格式为:类型 *变量名;其中,类型表示指针所指向的变量的类型,变量名表示指针的名称。

下面是一个简单的指针变量

int a= 10;
int *pa = &a;
*pa = 20;

其中
在这里插入图片描述

在这里插入图片描述
以上代码执行的效果就是将a的值改为20。

那么怎么理解这个过程呢?

我们可以把a看做自己,我点了一份外卖,在电话中,我们告诉了外卖小哥(pa)我的家庭住址,于是外卖小哥(pa)通过地址找到了我,将外卖送到了我手上。

指针的类型决定了对指针解引用的时候一次能操作几个字节,在这其中有一种特殊的类型

泛型指针

所谓 void * 指针是指无具体类型的指针(或者叫泛型指针),这种类型的指针可以用来接受任意类型的地址,但相对的void * 类型的指针不能直接进行指针的加减和解引用的运算。如果非要运算,请先强制类型转换!!!

指针的关系运算

指针的运算包括两种:算术运算和关系运算。

算数运算

指针可以进行加、减运算。
对于指针p,p+1表示p所指向的下一个内存单元的地址,p-1表示p所指向的前一个内存单元的地址。这种运算的本质是在指针所指向的地址上加上某个值,得到一个新的地址。
在这里插入图片描述

注意:在进行指针运算时,要确保两个指针指向的内存是同一块空间,且指针运算不会越界。

关系运算

指针可以进行比较运算。例如,对于指针p和q,p>q表示p所指向的地址大于q所指向的地址,p<q表示p所指向的地址小于q所指向的地址。


结语

请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
想成为大佬那就保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

编程小白写作,如有纰漏或错误,欢迎指正


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

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

相关文章

半监督节点分类上的HyperGCN

1.Title HyperGCN: Hypergraph Convolutional Networks for Semi-Supervised Classification&#xff08;Naganand Yadati、Prateek Yadav、Madhav Nimishakavi、Anand Louis、Partha Talukdar&#xff09;【ACM Transactions on Knowledge Discovery from Data 2022】 2.Conc…

SimpleDataFormat 非线程安全

目录 前言 正文 1.出现异常 2.解决方法1 3.解决方法2 总结 前言 SimpleDateFormat 类是 Java 中处理日期和时间格式化和解析的类&#xff0c;但它并不是线程安全的。这意味着多个线程不能安全地共享一个 SimpleDateFormat 实例进行日期和时间的解析和格式化。当多个…

第二次量子化

专栏目录: 高质量文章导航-持续更新中 前置复盘: 玻色子和费米子: 首先,我们希望把描述单粒子态的量子力学推广到全同多粒子体系。我们的做法是从单粒子态的希尔伯特空间(Hilbert Space)出发,构造全同多粒子态的态空间——福克空间(Fock Space),它实际上就是无穷个…

nodejs微信小程序+python+PHP药品招标采购系统的设计与实现-计算机毕业设计推荐MySQL

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

制作一个RISC-V的操作系统一-计算机系统漫游

文章目录 计算机的硬件组成两种架构程序的存储与执行程序语言的设计和进化一个mini计算机 编程语言的进化存储设备的层次结构操作系统 计算机的硬件组成 所有硬件由总线连接起来 两种架构 总线个数不同&#xff0c;Memory储存内容不同 程序的存储与执行 首先编译和链接某…

测试面经1130

深信服软件测试实习生面经 1. 自我介绍2. 深入的聊一下软件测试岗位主要是干什么的&#xff1f;是一个怎样的工作&#xff1f;他的职责定位&#xff1f;软件测试需要哪些知识技能&#xff08;软件测试是做什么的&#xff1f;&#xff09;3. 如果开发了一个系统&#xff0c;没有…

计算机毕业设计 基于Web的铁路订票管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

解读Java虚拟机垃圾回收器:探究经典算法背后的奥秘

目录 一、GC分类与性能指标 &#xff08;一&#xff09;垃圾回收器分类 &#xff08;二&#xff09;性能指标 &#xff08;三&#xff09;不可能三角 二、不同的垃圾回收器概述 三、Serial回收器&#xff1a;串行回收 四、ParNew回收器&#xff1a;并行回收 五、Parall…

可视化数据库管理客户端:Adminer

简介&#xff1a;Adminer&#xff08;前身为phpMinAdmin&#xff09;是一个用PHP编写的功能齐全的数据库管理工具。与phpMyAdmin相反&#xff0c;它由一个可以部署到目标服务器的文件组成。Adminer可用于MySQL、PostgreSQL、SQLite、MS SQL、Oracle、Firebird、SimpleDB、Elast…

水果编曲软件fl studio手机版下载

fl studio mobile手机版中文名水果编曲软件&#xff0c;它是一款非常不错的音乐编曲软件&#xff0c;凭借简单易上手的操作方式&#xff0c;强悍且实用的功能&#xff0c;深受到了音乐创作者的喜爱&#xff0c;不仅仅提供了广阔的音乐创作空间&#xff0c;可以让用户对舞曲、轻…

巧用MACD精准抄底和逃顶

一、认识MACD MACD又称平滑异同移动平均线&#xff0c;是由美国投资家杰拉尔德阿佩尔在 20 世纪 70 年代末提出的。 MACD 指标的设计基于MA均线原理&#xff0c;是对收盘价进行平滑处理&#xff08;求出加权平均值&#xff09;后的一种趋向类指标。它是股票交易中一种常见的技术…

CGAL的三维曲面细分方法

1、介绍 细分方法是从任意多边形网格生成平滑曲面的简单而强大的方法。与基于样条曲面的方法&#xff08;如NURBS&#xff09;或其他基于数字的建模技术不同&#xff0c;细分方法的使用者不需要掌握细分方法的数学知识。几何的直观性足以控制细分方法。 Subdivision_method_3适…

【U8+】用友U8删除固定资产卡片,提示:当前卡片不是本月录入的卡片,不能删除。

【问题描述】 用友U8软件&#xff0c;参照已有账套新建账套的时候&#xff0c;选择结转期初余额。 例如&#xff1a;参照已有账套的2022年新建2023年的账套。 结转期初的时候勾选了固定资产模块&#xff0c; 建立成功后登录23年新的账套后&#xff0c;删除固定资产卡片&#xf…

CSS 滚动捕获 scroll-margin

CSS滚动捕获 scroll-margin 非滚动捕获容器语法兼容性 CSS滚动捕获 scroll-margin 设置元素的滚动外边距 非滚动捕获容器 之前在 scroll-padding 中说过如何用 scroll-padding 避免锚点定位时元素贴着容器边缘的问题, 现在我们尝试用 scroll-margin 解决 <body><ma…

electerm下载和安装

electerm下载和安装 一、概述 electerm 是一款免费开源、基于electron/ssh2/node-pty/xterm/antd/ subx等libs的终端/ssh/sftp客户端(linux, mac, win)。 而且个人觉得electerm界面更好看一些&#xff0c;操作都是类似的。 二、下载安装 下载地址&#xff1a;https://elec…

opencv知识库:基于cv2.flip()函数对图像进行随机翻转(水平/垂直)

需求场景 欲对RGB格式的lena图像进行随机翻转&#xff0c;要求这些图像不翻转、水平翻转、垂直翻转的概率都为1/3。 功能代码 import cv2 import random# 读取并展示图像 img cv2.imread("lena.jpg") cv2.imshow(lena, img) cv2.waitKey(0)for i in range(6): #…

react之ReactRouter的使用

react之ReactRouter的使用 一、环境搭建二、抽象路由模块三、路由导航3.1 声明式导航3.2 编程式导航 四、导航传参4.1 searchParams 传参4.2 params 传参 五 、嵌套路由配置六、默认二级路由七、404页面配置八、俩种路由模式 一、环境搭建 1.创建项目安装依赖 npx create-rea…

【每日OJ —— 226. 翻转二叉树】

每日OJ —— 226. 翻转二叉树 1.题目&#xff1a;226. 翻转二叉树2.解法2.1.算法讲解2.2.代码实现2.3.代码提交通过展示 1.题目&#xff1a;226. 翻转二叉树 2.解法 2.1.算法讲解 我们从根节点开始&#xff0c;递归地对树进行遍历&#xff0c;并从叶子节点先开始翻转。如果当前…

Spring是怎么解决循环依赖的?

什么是循环依赖 循坏依赖就是字面意思&#xff0c;A 依赖了 B&#xff0c;B 同时也依赖了 A。 如下所示 Component public class A {// A中注入了BAutowiredprivate B b; }Component public class B {// B中也注入了AAutowiredprivate A a;又或者是下面这种 // 自己依赖自己…

Zabbix监控接收SNMPTrap消息与SNMPTT结合

一.SNMP 协议 1.协议介绍 snmp 协议是日常使用的较多的一种协议&#xff0c;绝大多数网络设备/存储等都支持 snmp 协议&#xff0c;通过此协议可以实现设备状态的监控及管理。 2.主要组成 SNMP 协议包括以下三个部分: SNMP Agent&#xff1a;负责处理 snmp 请求&#xff0c…