关于指针

2023-11-11

指针的一些基础知识
1、指针的定义
数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。
在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。

对于普通变量,在内存中需要通过占用内存的某个地址的。因此指针可以通过这个内存地址去找到这个变量。
假设定义一个char a = ‘K’;,该a变量在内存地址0x110下存储了字符’K’。我们如何通过指针来找到字符a所对应的值呢?
可以通过指针变量char *p; p=&a;也就是说我们先定义一个char类型的指针p,我们通过把a的地址0x110赋值给了p,注意指针变量需要的是一个地址,通过&可以取变量a的地址。指针变量p本身也是有一个内存地址的,假设为0x200,那么在内存地址0x200下存储了变量a的地址0x110,我们通过 *p就可以取出0x110内存地址下所对应的值了。

在指针定义时的*是指针的定义格式,给指针变量赋值时不需要带 *,定义完后对指针进行*操作就是取指针存储的地址下所对应的内容。

//定义普通变量
float a = 99.5, b = 10.6;
char c = '@', d = '#';
//定义指针变量
float *p1 = &a;
char *p2 = &c;
//修改指针变量的值
p1 = &b;
p2 = &d;

*是一个特殊符号,表明一个变量是指针变量,定义 p1、p2 时必须带*。而给 p1、p2 赋值时,因为已经知道了它是一个指针变量,就没必要多此一举再带上*,后边可以像使用普通变量一样来使用指针变量。也就是说,定义指针变量时必须带*,给指针变量赋值时不能带*
假设变量 a、b、c、d 的地址分别为 0X1000、0X1004、0X2000、0X2004,下面的示意图很好地反映了 p1、p2 指向的变化:
在这里插入图片描述
2、如何通过指针变量取得数据
指针变量存储的时数据的地址,通过指针变量就能获得该地址上的数据。就是*符号,对指针进行操作。

#include <stdio.h>
int main(){
    int a = 100, b = 999, temp;
    int *pa = &a, *pb = &b;//在定义时就把变量的地址赋值给了指针
    printf("a=%d, b=%d\n", a, b);
    /*****开始交换*****/
    temp = *pa;  //将a的值先保存起来
    *pa = *pb;  //将b的值交给a
    *pb = temp;  //再将保存起来的a的值交给b
    /*****结束交换*****/
    printf("a=%d, b=%d\n", a, b);
    return 0;
}

输出的结果
a=100, b=999
a=999, b=100
3、关于*和&
假设有一个 int 类型的变量 a,pa 是指向它的指针,那么*&a&*pa分别是什么意思呢?

*&a:&a是取了变量a的地址也就是指针pa,*&a就是取该地址下的数据也就是*pa,也就是变量a所对应的数据。*&a=a
&*pa*pa就是取变量a,&*pa就是取变量a的地址,也就是指针变量pa。&*pa=pa

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于指针 的相关文章

  • STM32 Keil:warning: #223-D: function "LED_Init" declared implicitly

    include stm32f10x h include led h int main LED Init while 1 GPIO SetBits GPIOD GPIO Pin 6 运行时警告 warning 223 D function L
  • STM32 Keil:warning: #223-D: function "LED_Init" declared implicitly

    include stm32f10x h include led h int main LED Init while 1 GPIO SetBits GPIOD GPIO Pin 6 运行时警告 warning 223 D function L
  • STM32入门:Systick(嘀嗒定时器)学习

    Systick 系统嘀嗒定时器 学习 一 Systick 介绍 Systick 是 STM32 的一个系统定时器 又名系统嘀嗒定时器 是一个 24 位的倒计数定时器 当计数到 0 时 将从 RELOAD 寄存器中自动重装载定时初值 开始新一
  • STM32学习心得(二)点亮LED灯

    STM32学习心得 二 点亮LED灯 在创建好工程模板后 就可以开始真正进入STM32的学习 手下那当然是试着点亮一个LED灯 首先在USER目录下创建一个空文件夹 并命名为bsp led bsp的意思是板级支持包 即该代码仅支持这块板子
  • stm32学习笔记 AFIO重映射功能 以TIM2的CH1可以从PA0挪动到PA15的引脚上距离为例

    首先在STM32F103C8T6引脚定义的图里找到是否有可以复用的引脚 因为我们的TIM2 CH1 ETR的数据是在引脚PA0上显示 如果要换 根据此表只能换到PA15 如图PA15 默认 是调试端口所以如果要想让其作为普通IO口或者复用定
  • 代码实现 —— 基于 STM32 的可见光通信系统课程设计

    目前课设已完成 2m距离 传输10000个连续数字 每个数字两字节大小 即总共20000个字节160000bit 用时7s 大约2 3万bit s 即22 4kB s 误码率为0 视频演示链接 另外 自己写了一个基于QT的串口上位机 结合U
  • STM32 基于keil5的printf打印设置

    1 因为使用串口来打印 所以将fputc函数和fgetc函数放在usart c源文件中 2 在usart c源文件中添加stdio h头文件 3 打印信息常用于调试 不建议使用中断 4 在usart c源文件中添加如下代码 int fput
  • 【STM32学习】——定时器的编码器接口&正交编码器&编码器接口测速代码实操

    文章目录 前言 一 编码器接口 1 简介 2 正交编码器 二 实操案例 编码器接口测速 总结心得 声明 学习笔记根据b站江科大自化协stm32入门教程编辑 仅供学习交流使用 前言 引入 本实操案例与之前学习外部中断时写的旋转编码器计次的代码
  • STM32CubeMX----基本定时器(TIM6、TIM7)

    基本定时器TIM6 TIM7 的相关参数 Activated 激活TIM6 把前面的方框选中局表示激活了TIM6 One Pulse Mode STM32F103定时器的One Pulse Mode是一种特殊的计数模式 它只产生一个脉冲输出
  • 【stm32学习】正点原子stm32f103学习——开发板入门

    一 连接外设 数据手册中FT标志的IO口是兼容5V的 原理图上带ADC都是不兼容5V 判断能否作为ADC输入 外设 首先了解一下ADC ADC是Analog to DigitalConverter的缩写 指模 数转换器或者模拟 数字转换器
  • 【STM32】stm32是什么

    作者 一只大喵咪1201 专栏 STM32学习 格言 你只管努力 剩下的交给时间 STM32的简单介绍 介绍 特点 认识STM32 总结 介绍 STM32是一款单片机 它由意法半导体公司制造 ST是意法半导体的简称 M是指微控制器 也就是单
  • Stm32学习(七)外部中断

    1 外部中断 1 stm32的每一个IO都可以作为外部中断输入 2 stm32的中断控制器支持19个外部中断 事件请求 线0 15 对应外部IO口的输入中断 线16 连接到PVD输出 线17 连接到RTC闹钟事件 线18 连接到USB唤醒事
  • 【GPIO】通用输入/输出工作模式原理

    1 GPIO基本结构 保护二极管 IO引脚上下两边两个二极管用于防止引脚外部过高 过低的电压输入 当引脚电压高于VDD时 上方的二极管导通 当引脚电压低于VSS时 下方的二极管导通 防止不正常电压引入芯片导致芯片烧毁 P MOS管和N MO
  • STM32学习记录2 1.26

    本人为纯纯初学者 水平非常低 写文章只是为了记录学习经历 并且输出文字加强理解与记忆 本文十分不严谨 只具参考作用 可能具有误导性 请谨慎阅读 如果各位dalao发现错误 欢迎友善的指正 建议与讨论 初入CSDN 对平台的规范不是很熟悉 还
  • HAL库下的systick 底层配置 HAL_Delay实现原理 微秒级延时(非中断)以及一些重写延时的小坑 关于HAL_Delay的使用问题

    systick HAL Delay实现原理 微秒级延时 非中断 以及一些重写延时的小坑 关于HAL Delay的使用问题 HAL Delay实现原理 HAL库下的systick 底层配置 实现微秒级的延时 重写延时的小坑 关于HAL Del
  • 【stm32学习】GPIO函数理解

    注 在魔术棒output选中 下图 函数编译后 可以在声明处右击 跳转至函数的定义 GPIO Init初始化 例子 注意 速度只有三个可选 输入输出模式 GPIO Mode AIN 模拟输入 GPIO Mode IN FLOATING 浮空
  • 关于指针

    指针的一些基础知识 1 指针的定义 数据在内存中的地址也称为指针 如果一个变量存储了一份数据的指针 我们就称它为指针变量 在C语言中 允许用一个变量来存放指针 这种变量称为指针变量 指针变量的值就是某份数据的地址 这样的一份数据可以是数组
  • 初学stm32-库函数开发步骤及总结

    stm32库函数开发 一 外设常具备的几类寄存器 二 控制外设的常见操作 三 外设的初始化 四 数据传送 五 状态检查与清除 六 外设函数分类 一 外设常具备的几类寄存器 控制寄存器xxx CR Control Configuration
  • KEIL仿真调试问题

    Q1 如何使用keil调试程序 A1 第一个表示跳转到下一个程序状态 第二个表示跳转到下一行 在主程序中的时候也是直接跳转到主程序的下一行 第三个表示 watch窗口可以查看变量的数值 Q2 使用MDK进行软件设计时没有使用ST官方的模板而
  • STM32 用cubemx移植IAP功能,实现串口升级

    感谢网上的大神 通过你们的文章我终于测试iap升级通过了 具体iap功能我白嫖一段 程序上电先进入 bootloader代码功能 后面通过bootloader跳转到用户的功能代码中 使用的开发板芯片 STM32F103VET6 串口1升级

随机推荐

  • Liunx下使用docker搭建ftp服务

    1 检索最新镜像 docker search vsftpd 2 拉取FTP镜像 docker pull fauria vsftpd 3 查看本机ip ifconfig 4 运行并创建container 方法1 运行时创建用户名和密码 doc
  • 计算机是仿生学,一种基于人体仿生学的计算机键盘的制作方法

    本实用新型属于计算机键盘技术领域 具体涉及一种基于人体仿生学的计算机键盘 背景技术 键盘是最常用也是最主要的输入设备 通过键盘 可以将英文字母 数字和标点符号等输入到计算机中 从而向计算机发出命令和输入数据等 键盘 由一组按阵列方式装配在一
  • 什么是软件测试、生命周期、软件开发模型、测试模型

    目录 1 什么是软件测试 2 软件测试和软件软件开发的区别 3 软件测试 Testing 和软件调试 Debug 的区别 4 什么是需求 5 需求是测试人员开展软件测试工作的依据 6 测试人员如何深入了解需求 7 测试用例 Test Cas
  • mysql 导入超大sql文件

    mysql u root p 登录mysql命令 可以登陆mysql服务器使用source命令导入 会快很多 我这里导入500M 大概用了5分钟 1 liunx登陆mysql mysql u 用户名 p 数据库名 然后输入密码 登陆mysq
  • Blender 雕刻

    文章目录 简介 基本操作 进入雕刻 雕刻工作区 强度 笔刷 纹理 笔画 衰减 动态拓扑 动态拓扑属性 重构网格 物体数据属性重构网格 雕刻自带的重构网格 镜像 同一个模型的不同网格 对其中一个雕刻 不影响其他的网格 快捷键 笔刷 自由线 显
  • 知识图谱——机器大脑中的知识库

    Published by liuzy on July 6 2015 作者 刘知远 清华大学 整理 林颖 RPI 版权所有 转载请注明出处 知识就是力量 英 弗兰西斯 培根 1 什么是知识图谱 在互联网时代 搜索引擎是人们在线获取信息和知识的
  • 计算机2.0培训心得,信息2.0培训心得体会

    今年7月份学校召开了关于学校信息化教育的会议 由于刚接触 我们听得一头雾水 于是就在摸索中开始了我们的信息化2 0工程培训学习 由于我组的化学科目特殊性 除了选择基础的A1技术支持的学前分析和A3演示文稿设计与制作外 我们还选择了B6技术支
  • IDEA报错解决:Cannot resolve com.oracle:ojdbc7:12.1.0.2或‘com.oracle:ojdbc7:12.1.0.2‘ not found

    1 到oracle官网下载ojdbc7 jar 附博主的ojdbc7 jar包下载地址 也可进入我的资源中下载 存入本地 不要存入maven仓库 2 打开cmd 切换到ojdbc7 jar所在文件夹 3 执行命令mvn install in
  • Vue(五)——调试

    一 console输出到控制台 如果Vue项目中 使用了eslint loader 代码规范 空格 缩进 console等测试语句 的话 就没法使用console 一定需要使用console可以尝试关闭eslint loader 在vue
  • Spring 如何从 IoC 容器中获取对象?

    前情回顾 前面几篇文章主要分析了 Spring IoC 容器如何初始化 以及解析和注册我们定义的 bean 信息 其中 Spring 中的 IoC 容器 对 Spring 中的容器做了一个概述 Spring IoC 容器初始化 和 Spri
  • 碰到了version `GLIBC_2.27' not found错误

    碰到了version GLIBC 2 27 not found错误 我查了下 因为glibc是系统级底层软件 自己编译的可能会跟原来的不一致 会导致系统不兼容 结果我在 etc ld so conf里面添加了 opt glibc 2 27的
  • C++/C笔试面试题目大大的集合

    C C笔试面试题目大大的集合 2010 10 22 00 08 3742人阅读 评论 0 收藏 举报 面试 c string 编译器 null 设计模式 1 const 有什么用途 请至少说明两种 答 1 可以定义 const 常量 2 c
  • 基于PHP的简单微博系统

    一 项目介绍 基于PHP的简单微博系统 php mysql apache开发 适合新手练习 可搭建在phpstudy下 有完整的sql文件和配置文件 三分钟快速部署 二 主要功能 1 注册 登录微博 2 个人中心 个人信息修改 查看我的关注
  • 【官方文档】《暗黑世界GM管理后台系统》部署+功能说明

    欢迎来到9秒 www 9miao com 暗黑三国管理后台说明文档 一 功能描述 该后台共分为三大部分 服务器管理 单服数据统计和扶持账号管理 1 服务器管理 根据管理后台数据库中填写的服务器信息 后面会讲到如何填写要管理的服务器的信息到数
  • golang http请求时设置代理ip

    在http Client中自定义Transport 设置Proxy即可 目前网上存在很多代理ip网站 本人也写过一些代理ip网址的爬取 见 GitHub 如果需要代理验证 那么如下进行设置 否则直接设置为url Parse http inp
  • CSS设计指南(第3版)》

    CSS设计指南 第3版 基本信息 原书名 Stylin with CSS a designer s guide 作者 英 Charles Wyke Smith 译者 李松峰 丛书名 图灵程序设计丛书 出版社 人民邮电出版社 ISBN 978
  • ATL与COM之间的关系、ATL的特点与基本使用方法

    ATL Active Template Library活动模板库 是一种微软程序库 支持利用C 语言编写ASP代码以及其它ActiveX程序 通过活动模板库 可以建立COM组件 然后通过ASP页面中的脚本对COM对象进行调用 这种COM组件
  • [R语言]R包的安装&帮助获取

    本文主要参考 Paul Teetor R语言经典实例 一书 在R语言中 包含的包中有各种应用函数 1 install packages packagename 安装R包 library package name 载入包 对于base包可省略
  • CentOS7安装oracle19c

    教程 https zhuanlan zhihu com p 571737575 CentOS7安装oracle19c教程 https zhuanlan zhihu com p 571737575 一 准备工作 1创建 oracle 用户 以
  • 关于指针

    指针的一些基础知识 1 指针的定义 数据在内存中的地址也称为指针 如果一个变量存储了一份数据的指针 我们就称它为指针变量 在C语言中 允许用一个变量来存放指针 这种变量称为指针变量 指针变量的值就是某份数据的地址 这样的一份数据可以是数组