关于指针

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学习】——定时器输出比较功能&PWM脉宽调制&通用/高级定时器输出比较通道&舵机/直流电机简介&PWM驱动呼吸灯/舵机/直流电机代码实操

    文章目录 前言 一 输出比较简介 二 PWM波形 三 输出比较通道 1 通用定时器 2 高级定时器 三 外设简介 1 舵机 2 直流电机 四 实操案例 1 PWM驱动LED呼吸灯 2 PWM驱动舵机 3 PWM驱动直流电机 总结 声明 学习
  • 代码实现 —— 基于 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
  • Keil5关于.h文件编译时遇见报错打不开时的解决方案

    添加路径即可
  • STM32串口调试一直打印 00 00

    在STM32串口调试过程中 通过printf函数往串口打印英文字母 串口助手却一直收到 00 凭直觉 这种情况一般都是时钟没配置好 但是查代码很难找到原因 经过反复查找 发现是STM32CubeMX中时钟源选择错误 就是下面这个地方 切记一
  • STM32进阶:使用STM32驱动ST7735S(内附核心源码)

    使用STM32驱动ST7735S 内附核心源码 感觉很久很久没有来博客更新了 历经千难万阻 终于做出来了TFT显示屏的SPI驱动 这里分享以下核心源码 接下来一段时间开始准备考科一了 后面有时间了再来更新 有三种模式下的驱动 一 软件SPI
  • STM32学习----RS232串口通讯

    一 RS232相关概念 RS Recommend Standard 推荐标准 232 标识号 第232号 时间 1962年 地点 美国 人物 美国电子工业协会 Electronic Industries Association 美国 电子工
  • 【stm32学习】正点原子stm32f103学习——开发板入门

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

    文章主要是个人的笔记 所以很多地方可能是根据自己的情况来写的 驱动器 使用的是L298N CubeMX的配置 基本的配置略过 时钟源等 我们使用定时器1 1 选择内部时钟 通道1 PWM互补通道 2 这里我们后面把预分频的值改为了3 计数值
  • Stm32学习(七)外部中断

    1 外部中断 1 stm32的每一个IO都可以作为外部中断输入 2 stm32的中断控制器支持19个外部中断 事件请求 线0 15 对应外部IO口的输入中断 线16 连接到PVD输出 线17 连接到RTC闹钟事件 线18 连接到USB唤醒事
  • STM32学习----通用定时器的应用(输入捕获,测量周期和占空比)

    输入捕获的应用 输入捕获一般是用来测量输入信号的频率 占空比这些信息 输入捕获的原理 捕获的原理 1 信号从某个通道输入 比如通道1 CH1 2 经过滤波和边沿检测后产生两个一模一样的信号TI1FP1和TI1FP2 TI1FP1送给捕获通道
  • 【GPIO】通用输入/输出工作模式原理

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

    本人为纯纯初学者 水平非常低 写文章只是为了记录学习经历 并且输出文字加强理解与记忆 本文十分不严谨 只具参考作用 可能具有误导性 请谨慎阅读 如果各位dalao发现错误 欢迎友善的指正 建议与讨论 初入CSDN 对平台的规范不是很熟悉 还
  • STM32CubeMX—串口空闲中断+DMA接收

    一 实验说明 实验平台 STM32F103C8T6 实验内容 使用串口一空闲中断结合DMA 完成不定长数据接收 STM32的串口接收数据的方式 1 轮询接收 所谓轮询 就是在主函数中判断接收完成的标志位 举个不太恰当例子 就比如 此时你正在
  • 【stm32学习】GPIO函数理解

    注 在魔术棒output选中 下图 函数编译后 可以在声明处右击 跳转至函数的定义 GPIO Init初始化 例子 注意 速度只有三个可选 输入输出模式 GPIO Mode AIN 模拟输入 GPIO Mode IN FLOATING 浮空
  • 初学stm32-库函数开发步骤及总结

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

    Q1 如何使用keil调试程序 A1 第一个表示跳转到下一个程序状态 第二个表示跳转到下一行 在主程序中的时候也是直接跳转到主程序的下一行 第三个表示 watch窗口可以查看变量的数值 Q2 使用MDK进行软件设计时没有使用ST官方的模板而
  • 那些踩过的declared implicitly的坑

    缺少头文件 我的本意是想做串口打印进行调试 于是我在usart c中重写了这两个函数 这里顺便记录下如何串口打印 usart c中 int fputc int ch FILE f HAL UART Transmit huart1 uint8

随机推荐

  • 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语言中 允许用一个变量来存放指针 这种变量称为指针变量 指针变量的值就是某份数据的地址 这样的一份数据可以是数组