C语言从头学20——指针

       概念:指针是一个整型值,这个值代表一个内存地址,可以理解为指针是内存地址的门牌号码。通过指针可以找到所代表的内存地址上储存的内容。
一、指针变量的声明
       字符 * 放在两个变量之间表示乘号,放在类型后边就表示声明该类型的指针。既然指针是值那就可以赋给变量,这个变量就是指针变量。指针是什么 "具体类型" 呢?可以说指针有具体类型 也可以说指针没有具体类型。说指针有具体类型,是因为不管什么类型声明的指针,它们都占有相同的字节长度,单成一系;说指针没有具体类型,指针类型的声明是随着它指向的目标变化的,int*只能声明整型指针,float*只能声明float指针。可以这样理解:指针是毛,它指向的目标变量是,
皮之不存毛将焉附,毛随着皮走。
       继续说指针类型,指向int类型的指针用int*声明,指向char的指针用char*声明,包括我们自定义的类型加上*就是相应的指针声明。
       例如:int* iPtr; //声明int型指针变量iPtr,iPtr中存有一个整数标明一个int值(变量)的地址
       注意,声明指针变量要一个一个声明,用","隔开的方式不可行
二、*、&运算符
      字符 "*" 可以作乘号,还可以进行指针声明,它还是一个指针的运算符,把它放到指针变量的前面,返回的就是指针指向的地址里存储的值。"&"是"*"的逆运算符,我们把"&"放到一个变量的前面,就可以得到该变量所在的地址,就是经常说的取址。说着绕嘴,举个例子理解起来就很简单:

   int i=100; //声明一个int型变量并赋值100int* iPtr=&i; //声明一个int型指针变量iPtr并让它指向变量i//即把i所在的内存地址赋给iPtr(&i意为取i的地址,简称取址)printf("%d",*iPtr); //运行结果:100 (通过指针变量把存在内存中的值又找了回来)

       总结:声明或从地址中取原值用"*",通过变量名找地址用"&"。
三、指针变量的初始化
       声明指针变量之后,编译器会为指针变量本身分配一块内存,但是这块内存里到低存着什么谁也不清楚。对于指针而言就是说不知道它到底指向哪里,它指向的地方能不能使用。所以指针声明后必须进行初始化。
       前面的举例,int* iPtr=&i;就是指针变量的声明与初始化一同完成了。
       有时,我们需要提前声明一些指针,等待后边使用,这时我们可以用NULL先初始化。用NULL初始化的指针称为空指针(指向的内存地址为不存在的0),如果我们忘了为其再初始化而直接使用,编译器会报错。
四、指针的运算
       指针本质上就是一个代表了内存地址的无符号整数,当然可以进行运算,但是规则并不是整数运算的规则。
1.指针与整数值的加减运算
       指针与整数值的运算,表示指针的移动。这种移动一次是多少呢?具体与指针指向的数据类型相关,该数据类型占有几个字节指针就移动几个字节。说着不好理解,还是举例说明吧:
       为说明的更清楚,这里先使用一下数组的概念,所谓数组就是占用连续内存空间存储若干同类型值(称为元素)的集合。
       int A[10] = { 21,22,36,44,58,89,54,65,87,14 }; //声明含有10个int类型元素的数组并赋初值
       int* pA = &A[0]; //取得第一个元素的地址赋给int型指针变量pA
       printf("%i\n", *pA);//运行结果:21(第0个元素)
       pA = pA + 1;//+1表示向后移动1个int型所占字节数,指向第1个int型元素(从0开始计数)
       printf("%i\n", *pA);//运行结果:22(如果抛开所占字节,实际指针移动1个元素更好理解)
       pA = pA + 5;//+5表示向后再移动5个int型所占字节数,指向第6个int型(起始位置是+5前指针所在位置1)
       printf("%i\n", *pA);//运行结果:54 
       pA = pA - 2;//-2表示向前退2个int型所占字节数,指向第4个int型元素(从+5后的位置往回退)
       printf("%i\n", *pA);//运行结果:58
       总结:指针的加减整数运算,是相对于某一连续内存地址存储相同类型元素而言的,否则就不能使用加减整数运算。这里强调"连续"内存空间和同类型元素,要多理解一下。至于+1代表移动几个字节,相同类型在不同编译器上所占字节也可能不一样,记不记两可。指针指到某位置后如果不做其它操作,它就指着那,所以有个"当前位置"的概念。
2.指针与指针之间的加法没有意义。
3.相同类型的指针允许进行减法运算,返回它们之间的距离,如果再乘上该类型单个元素所占字节数,那么这两个指针之间共占用多少字节就可以计算出来了。
4.指针之间可以进行比较运算,比较的是哪个地址更大,可以获得在内存中位置的前后关系。
 附:计算常用类型指针所占字节数小程序

#include<stdio.h>
int main(void)
{printf("int类型占 %zd字节,int*类型占 %zd字节\n", sizeof(int),sizeof(int*));printf("char类型占%zd字节,char*类型占%zd字节\n", sizeof(char),sizeof(char*));printf("short类型占%zd字节,short*类型占%zd字节\n", sizeof(short),sizeof(short*));printf("double类型占%zd字节,double*类型占%zd字节\n", sizeof(double),sizeof(double*));printf("long类型占%zd字节,long*类型占%zd字节\n", sizeof(long),sizeof(long*));char c = getchar(); //阻塞程序运行return 0;}

    使用VS2022运行结果:
    int类型占 4字节, int*类型占 8字节
    char类型占1字节,char*类型占8字节
    short类型占2字节,short*类型占8字节
    double类型占8字节,double*类型占8字节
    long类型占4字节,long*类型占8字节
    说明:一般资料介绍指针类型均占4个字节,我使用VS2022编译器结果是8个字节,但无论如何在同一系统内无论是什么类型的指针它们所占字节数都是相同的。

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

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

相关文章

6-11 函数题:某范围中的最小值

6-11 函数题&#xff1a;某范围中的最小值 分数 5 全屏浏览 作者 雷丽兰 单位 宜春学院 有n(n<1000)个整数&#xff0c;从这n个整数中找到值落在&#xff08;60至100之间&#xff09;的最小整数。 函数接口定义&#xff1a; int min ( int arr[], int n); 说明&#xf…

mysql的主从同步

MySQL的主从同步是一种数据复制技术&#xff0c;它允许将一个MySQL数据库服务器上的数据变化自动复制到一个或多个MySQL数据库服务器上。主从同步广泛用于高可用性、负载均衡、读写分离和数据备份。下面详细介绍MySQL主从同步的原理、配置步骤、常见问题及解决方法。 一、基本…

Dijkstra算法的原理

Dijkstra算法的原理可以清晰地分为以下几个步骤和要点&#xff1a; 初始化&#xff1a; 引入一个辅助数组D&#xff0c;其中D[i]表示从起始点&#xff08;源点&#xff09;到顶点i的当前已知最短距离。如果起始点与顶点i之间没有直接连接&#xff0c;则D[i]被初始化为无穷大&a…

边缘计算网关在智慧厕所远程监测与管理的应用

随着智慧城市建设的不断深入&#xff0c;城市公共设施的智慧化管理成为了提升城市品质和居民生活质量的关键建设。公厕作为城市基础设施的重要组成部分&#xff0c;其管理效率和卫生状况直接影响着市民的日常生活体验。在公厕设施建设背景下&#xff0c;边缘计算网关技术的应用…

使用Python多线程批量压缩图片文件

在现代社会中&#xff0c;图片已经成为人们生活中不可或缺的一部分&#xff0c;在很多应用中&#xff0c;我们需要处理大量的图片文件&#xff0c;并且常常需要将它们进行压缩以减小文件大小&#xff0c;提高加载速度&#xff0c; 如何使用Python的多线程功能来批量压缩图片文…

高精度汽车衡的应用领域有哪些?一文说清楚

很多人不知道什么是高精度汽车衡&#xff0c;它其实是一种称重工具&#xff0c;属于称重技术的重要分支。高精度汽车衡具有精准、快速且稳定的特点&#xff0c;在各个领域发挥着越来越重要的作用。下面来了解一下高精度汽车衡常见的应用领域。   高精度汽车衡在工业生产中的应…

关于xilinx srio ip复位问题

关于xilinx srio ip复位问题 语言 &#xff1a;Verilg HDL 、VHDL EDA工具&#xff1a; Vivado 关于xilinx srio ip复位问题一、引言二、FPGA 之间 srio通信复位处理复位时序不同步&#xff1a;SRIO 模块未正确初始化&#xff1a;等待复位完成的时间不足&#xff1a;SRIO 配置…

【JS重点09】JS闭包(面试重点)

本文核心目标&#xff1a;阅读完本文能说出什么是闭包&#xff0c;闭包作用以及如何利用闭包 一&#xff1a;闭包概览 1 闭包是什么 闭包&#xff08;closure&#xff09;是一个函数以及其捆绑的周边环境状态&#xff08;lexical environment&#xff0c;词法环境&#xff09…

NXP RT1060学习总结 - fsl_flexcan 基础CAN函数说明 -1

概要 CAN测试源码&#xff1a; https://download.csdn.net/download/qq_35671135/89425377 根据fsl_flexcan.h文件从文件末尾往前面梳理&#xff0c;总共30个基础CAN函数&#xff1b; 该文章只梳理常规CAN&#xff0c;增强型CAN后面再单独梳理。 使用的是RT1064开发板进行测试…

如何将接口返回/n替换为react.js中的换行符

将每个/n替换为ReactJS中的一个<br>标记。cpa_ability为后端返回的字段名

时间类:Calendar

一.Calendar概述 1.Calendar代表了系统当前时间的日历对象,可以单独修改,获取时间中的年&#xff0c;月&#xff0c;日 2.细节:Calendar是一个抽象类,不能直接创建对象。 二.获取Calendar日历类对象的方法 // 会根据系统的不同时区来获取不同的日历对象 // 会根据系统的不同…

6.每日LeetCode-数组类,找到所有数组中消失的数字(Go)

题目 448找到所有数组中消失的数字.go 给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 示例 1&#xff1a; 输入&#xff1a;nums [4,3,2,7,8,2,…

Web网页前端教程免费:引领您踏入编程的奇幻世界

Web网页前端教程免费&#xff1a;引领您踏入编程的奇幻世界 在当今数字化时代&#xff0c;Web前端技术已成为互联网发展的重要驱动力。想要踏入这一领域&#xff0c;掌握相关技能&#xff0c;却苦于找不到合适的教程&#xff1f;别担心&#xff0c;本文将为您带来一份免费的We…

双喜临门 | 两大权威报告发布,开源网安实力登榜

近日&#xff0c;开源网安凭借出色表现和实力&#xff0c;荣获两大荣誉&#xff1a;入选《中国信息安全》杂志社联合数说安全发布的《2024 年中国金融行业网络安全市场全景图》&#xff0c;并登榜安在发布的《2024安在新榜网络安全产品“大众点评”百强榜》。 2024年中国金融行…

Java开发规范

1.接口命名规范–Restful API 原本格式是动词资源by传参&#xff0c;后来进化为Restful API&#xff0c;思想是以资源为中心。 动词用get,post,put,delete请求方法代替&#xff0c;by后面的名词用传参代替。 并且GET方法传参资源ID采用路径传参&#xff0c;除了资源ID外的GET…

【智能算法应用】基于A星算法求解六边形栅格地图路径规划

目录 1.算法原理2.结果展示3.参考文献4.代码获取 1.算法原理 精准导航&#xff1a;用A*算法优化栅格地图的路径规划【附Matlab代码】 六边形栅格地图 分析一下地图&#xff1a; 六边形栅格地图上移动可以看做6领域运动&#xff0c;偶数列与奇数列移动方式有所差异&#xff0…

API技术简介与开发趋势

在当今的数字化时代&#xff0c;API&#xff08;应用程序编程接口&#xff09;技术已成为连接不同软件和服务的关键技术。API允许不同的应用程序之间进行交互&#xff0c;共享数据和功能&#xff0c;极大地提升了软件开发的效率和可扩展性。随着技术的进步和市场需求的变化&…

使用 Elasticsearch 调用 OpenAI 函数

作者&#xff1a;来自 Elastic Ashish Tiwari 介绍 OpenAI 中的函数调用是指 AI 模型与外部函数或 API 交互的能力&#xff0c;使它们能够执行文本生成之外的任务。此功能使模型能够通过调用预定义函数来执行代码、从数据库检索信息、与外部服务交互等。 该模型根据用户提示智…

连接·共享·成长:15大顶尖峰会热议AI,逾万商家聚焦实在Agent

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;和机器人流程自动化&#xff08;RPA&#xff09;正成为行业创新和效率提升的强大引擎。作为自动化领域的领航者&#xff0c;实在智能不仅在AI技术革新上保持领先地位&#xff0c;更通过一系列行业活动&…

[13] CUDA_Opencv联合编译过程

CUDA_Opencv联合编译过程 详细编译过程可见我之前的文章&#xff1a;Win10下OpencvCUDA联合编译详细教程&#xff08;版本455、460、470,亲测可用&#xff01;&#xff01;&#xff01;&#xff09;本文给出Windows\linux下的opencvcuda的编译总结&#xff0c;摘自 <基于GP…