C语言指针学习 之 指针是什么

news2025/2/4 20:39:37

前言

        指针是C语言中一个重要概念,也是C语言的一个重要特色,正确而灵活地运用指针可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人都应当深入的学习和掌握指针,也可以说不掌握指针就没有掌握C语言的精华。

一、什么是指针

        想弄清楚什么是指针,必须先弄清楚数据在内存中是如何存储的,又是如何读取的。

        如果在程序中定义了一个变量,在对程序进行编译时系统就会给这个变量分配内存单元。编译系统根据程序中定义的变量类型分配一定的长度空间,如visual C++为整型变量分配四个字节,为字符型变量分配一个字节,内存中的每一个字节都有一个编号,这就是“地址”。它相当于旅馆中的房间号,在地址所标志的内存单元中存放的数据则相当于旅馆房间中居住的旅客。

        由于通过地址能找到所需的变量单元,可以说地址指向该变量单元。打个比方:一个房间的门口挂了一个房间号2000,这个2000就是房间的地址,或者说2000指向该房间,因此将地址形象化地称为“指针”,也就是说通过它能找到地址的内存单元。

        说明(非常重要) 在C语言中,数据是分类型的,对不同类型的数据,在内存中分配的储存单元(字节数)大小也不一样的,存储方式也是不同的(如整数是以补码的形式存放的)。如果指定了地址是1010,要从带单元中调出数据是做不到的,虽然能找到对应的存储单元,但时不能确定是从一个字节还是2个字节还是三个字节取数据,也没有说是按何种存储方式进行存储数据的,因此C语言的地址包括位置信息(纯地址)和它所指向的数据的类型信息,如&a,一般称它为变量a的地址。

二、直接访问和间接访问

        在我们进行指针学习的过程中,一定要弄清楚存储单元的地址存储单元的内容这2个概念。

图1 

        如图所示程序已定义了3个整型变量ijk,在程序编译时,系统可能分配地址为2000~2003的4个字节给i,2004~2007的4个字节给j,2008~2011的4个字节给k。

        在程序中通过变量名来应用变量的值,例如:

        printf("%d",i);

        在执行上面语句时,首先通过变量名找到对应的地址,从该四个字节中按照整型数据的存储方式读出整型变量i的值,然后按十进制整数格式输出。(对变量的访问都是通过地址经行的)

       scanf("%d",&i);

        在执行时,把键盘输入的值送到地址为2000开始的整型存储单元中,如果有语句:

        k=i+j;

      就是从2000~2003的4个字节中取出值(3),2004~2007的4个字节中取出值(6),将它们相加再将其和(9)送到k所占用的2008~2011的4个字节。

        这种按变量名直接进行的访问,称为“直接访问”方式。

        还可以采用另一种称为“间接访问”的方式,将变量i的地址存放在另一个变量中,然后通过该变量来找到变量i的地址,从而访问i变量。

图2

         结合图1和图2,定义一个变量i-pointer用来存放整型变量的地址,可以通过下面语句将i的地址(2000)存放到i-pointer中:
        i-pointer=&i;

        这时,i-pointer的值就是2000,先找到存放变量i地址的变量i-pointer,从其中得到变量i的地址,从而找到变量i的存储单元,然后对它进行存取访问。

        为了将3送到变量中,可以有2中表达方式

        1.将3直接送到i所标识的单元中,例如i=3;

        2.将3送到i-pointer所指向的单元(即变量i的存储单元),例如*i-pointer=3;其中*i-pointer表示i-pointer的指向。

        指向是通过地址来体现的。假设i-pointer中的值是变量i的地址,这样i-pointer和i就建立了一种联系,通过i-pointer知道i的地址,从而找到i的存储单元。

三、指针变量(简讲,下一期详细讲解)

        如果有一个变量专门用来存放另一个变量的地址,则称它为指针变量,上述的i-pointer就是指针变量,指针变量就是地址变量,用来存放地址,指针变量的值是地址。

        注意:可以说变量i的指针是2000,而不能说i的指针变量是2000,指针是一个地址,而指针变量是存放地址的变量。

        小编下面给大家举一个例子认识一下指针变量:

        通过指针变量访问整型变量

#include<stdio.h>
int main()
{
    int a=100;
    int *hz;  
    hz =&a;
    printf("a=%d \n",a);
    printf("*hz=%d \n",*hz);
  return 0;
}


a=100 
*hz=100 
PS C:\csay\cyuyan> 

小结 

        指针是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,希望通过小编的介绍,能够帮助大家更好的学习知识,同时也希望大家对小编的不足之处即使指出,小编将在第一时间进行修正。

🚀感谢:给读者的一封信


亲爱的读者:

       这篇文章中我投入了大量的心血和时间,希望为大家提供有价值的内容。

        如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持了,这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响,也鼓励我花更多的时间和精力创作更多有价值的内容。

        如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

                            

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

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

相关文章

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(十六)

商家端订单管理模块 1. 订单搜索1.1 需求分析和设计1.2 代码实现1.2.1 admin/OrderController1.2.2 OrderService1.2.3 OrderServiceImpl 2. 各个状态的订单数量统计2.1 需求分析和设计2.2 代码实现2.2.1 admin/OrderController2.2.2 OrderService2.2.3 OrderServiceImpl2.2.4 …

python执行linux系统命令的三种方式

前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 1. 使用os.system 无法获取命令执行后的返回信息 import osos.system(ls)2. 使用os.popen 能够获取命令执行后的返回信息 impor…

红队渗透靶机:LEMONSQUEEZY: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录扫描 1、dirsearch 2、gobuster WEB phpmyadmin wordpress wpscan 登录wordpress 登录phpmyadmin 命令执行 反弹shell 提权 get user.txt 信息收集 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~…

Python如何运用爬虫爬取京东商品评论

寻找数据真实接口 打开京东商品网址(添加链接描述) 查看商品评价。我们点击评论翻页&#xff0c;发现网址未发生变化&#xff0c;说明该网页是动态网页。 我们在浏览器右键点击“检查”&#xff0c;&#xff0c;随后点击“Network”&#xff0c;刷新一下&#xff0c;在搜索框中…

【实战系列----消息队列 数据缓存】rabbitmq 消息队列 搭建和应用

线上运行图&#xff0c;更新不算最新版&#xff0c;但可以使用修改线程等补丁功能&#xff0c;建议使用新版本。 远程服务器配置图: 这个可以更具体情况&#xff0c;因为是缓存队列理所当然 内存越大越好&#xff0c;至于核心4核以上足够使用。4核心一样跑 这里主要是需要配置服…

Linux下gcc的使用与程序的翻译

gcc和程序的翻译过程 gcc介绍程序的翻译过程预编译编译汇编链接 命令行式宏定义 gcc介绍 gcc是一款编译C语言编译器&#xff0c;可以把我们用vim写的代码编译成可执行程序。编译C用g进行编译&#xff0c;C的文件后缀是test.cc或test.cpp或test.cxx 如果要安装g就执行以下命令 …

QPL:一种新型的Text-to-SQL任务中间表示形式

导语 本文提出了一种叫做Query Plan Language (QPL)的语言&#xff0c;用来将复杂SQL语句分解为更加简单的子语句。QPL具有以下优势&#xff1a;1&#xff09;可以转述为简单问题&#xff0c;从而创建了一个 < 复杂问题&#xff0c;分解问题 > <复杂问题&#xff0c…

在Debian11安装Proxmox VE 7及设置GPU工作环境

我们在测试大模型&#xff0c;深度学习的过程中&#xff0c;可能遇到的情况就是不断的清空系统&#xff0c;避免老系统中安装的软件对测试系统造成影响&#xff0c;导致测试结果不准确或莫名报错。今天为小伙伴们介绍使用PVE7做成一个人工智能开发和测试的平台&#xff0c;你可…

【安装记录】Chrono Engine安装记录

本文仅用于个人安装记录。 官方安装教程 https://api.projectchrono.org/8.0.0/tutorial_install_chrono.html Windows下安装 windows下安装就按照教程好了。采用cmake-gui进行配置&#xff0c;建议首次安装只安装核心模块。然后依此configure下irrlicht&#xff0c;sensor…

maven代码规范检查(checkstyle、findbugs)

maven代码规范检查 前言一、使用checkstyle插件1. maven-checkstyle-plugin 介绍2. 接入方式3. 如何排除某个类、包下面的文件不进行检查使用suppressionsLocation 4. 如何关闭 二、使用findbugs插件1.findbugs-maven-plugin介绍2. 接入方式3. 如何排除某个类、包下面的文件不进…

ENSP路由器打不开,查看virtualBox,故障机是 AR_Base

AR_Base错误代码为&#xff1a;Raw-mode is unavailable courtesy of Hyper-V. (VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT). 参考virtualBox解决不能为虚拟电脑 AR_Base 打开一个新任务. Raw-mode is unavailable courtesy of Hyper-V. win11亲测有用。_不能为虚拟电脑ar_base打…

day37WEB攻防-通用漏洞XSS跨站权限维持钓鱼捆绑浏览器漏洞

目录 XSS-后台植入 Cookie&表单劫持&#xff08;权限维持&#xff09; 案例演示 XSS-Flash 钓鱼配合 MSF 捆绑上线 1、生成后门 2、下载官方文件-保证安装正常 3、压缩捆绑文件-解压提取运行 4、MSF 配置监听状态 5、诱使受害者访问 URL-语言要适当 XSS-浏览器网马…

Redis核心技术与实战【学习笔记】 - 6.Redis 的统计操作处理

1.前言 在 Web 业务场景中&#xff0c;我们经常保存这样一种信息&#xff1a;一个 key 对应了一个数据集合。比如&#xff1a; 手机 APP 中的每天用户登录信息&#xff1a;一天对应一系列用户 ID。电商网站上商品的用户评论列表&#xff1a;一个商品对应了一些列的评论。用户…

PyTorch识别验证码

## 一、生成测试集数据pip install captcha common.py import random import time captcha_array list("0123456789abcdefghijklmnopqrstuvwxyz") captcha_size 4from captcha.image import ImageCaptchaif __name__ __main__:for i in range(10):image ImageC…

分布式事务(四)——TCC补偿模式解决方案

系列目录&#xff1a; 《分布式事务&#xff08;一&#xff09;—— 事务的基本概念》 《分布式事务&#xff08;二&#xff09;—— CAP和Base理论》 《分布式事务&#xff08;三&#xff09;—— 两阶段提交解决方案&#xff08;2PC&#xff09;》 一、常见分布式事务解决…

某航空网站promise异步定位js逆向解析

本次目标地址如下&#xff0c;使用base64解码获得 aHR0cHM6Ly9pbnQtZXQueGlhbWVuYWlyLmNvbS9mbGlnaHRzL3Jlc3VsdHM 打开网址&#xff0c;抓包分析后&#xff0c;发现响应结果在该请求中&#xff1a; 我们跟栈进去查找&#xff0c;从右边的堆栈调用过程中发现&#xff0c;这是典…

App ICP备案获取iOS和Android的公钥和证书指纹

依照《工业和信息化部关于开展移动互联网应用程序备案工作的通知》&#xff0c;向iOS和安卓平台提交App时需要先提交ICP备案信息。 iOS平台&#xff1a; 1、下载appuploader工具&#xff1a;Appuploader home -- A tool improve ios develop efficiency such as submit ipa to…

Docker 集群配置

1、配置 MySQL MySQL 简单安装 docker安装完MySQL并run出容器后&#xff0c;建议请先修改完字符集编码后再新建mysql库-表-插数据 docker run -d -p 2222:3306 --privilegedtrue -e MYSQL_ROOT_PASSWORD123456 \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/va…

通过18次止损,我终于领悟到交易的真谛

截断亏损让利润奔跑&#xff0c;这是操作的基础&#xff0c;也是操作的大体思路。了解并接受这个市场认识&#xff0c;基本上就把握住了市场的门道。至于市场走势&#xff0c;是无法准确预测的。 在交易的第一年&#xff0c;我处于一种懵懂的状态&#xff0c;对市场知之甚少。第…

2024美赛数学建模A题思路分析 - 资源可用性和性别比例

# 1 赛题 问题A&#xff1a;资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外&#xff0c;但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1&#xff1a;1&#xff0c;但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。…