当前位置: 首页 > news >正文

C语言学习记录(十一)——指针基本知识及运算

文章目录

  • 前言
  • 1. 指针的概念
  • 2.指针变量的说明
  • 3. 指针的含义
  • 4. 指针运算
    • ①指针加减:
    • ②指针的关系运算符


前言

一个学习嵌入式的小白~ 有问题评论区或私信指出~

提示:以下是本篇文章正文内容,下面案例可供参考

1. 指针的概念

在C语言中,内存单元的地址称为指针,专门用来存放地址的变量,有时对地址,指
针和指针变量不区分,统称指针。(地址==指针)

在这里插入图片描述

2.指针变量的说明

一般形式:

<存储类型>  <数据类型>   *<指针变量名>
例如:int *pName;int  a = 0;pName = &a;printf("%d",*p);

指针的存储类型是指针变量本身存储类型
指针说明时指定的数据类型不是指针变量本身的数据类型,而是指针目标的数据类型,简
称为指针的数据类型。

指针在说明的同时,也可以被赋予初值,叫做指针的初始化。

<存储类型> <数据类型> *<指针变量名> = <地址量>;
例如:int a ,*pa = &a;int a=1;printf("%d",*pa);

3. 指针的含义

指针指向的内存区域中的数据称为指针的目标
如果它指向的区域是程序的一个变量的内存空间,则这个变量称为指针的目标变量,简称
为指针的目标。
引入指针要注意程序中的px 、*px 和 &px 三种表示方法的不同意义,设px为一个指针,
则:

  • px ,指针变量,它的内容是地址量
  • *px,指针所指向的对象,它的内容是数据
  • &px,指针变量占用的存储区域的地址,是一个常量

指针的赋值运算指的是通过赋值运算符指针变量送一个地址值。
向一个指针变量赋值时,送的值必须是地址常量或指针变量,不能是普通的整数(除
了赋零以外)。

指针赋值运算常见的有以下几种形式:

  1. 把一个普通变量的地址赋给一个具有相同数据类型的指针
	  double x = 15 ,*px ;px =  &x ;  

2.把一个已有地址值的指针变量赋给具有相同数据类型的另一个指针变量

	int a = 5,*px,*py;px = &a;py = px;

3.把一个数组的地址赋给具有相同数据类型的指针

		int arr[10],*pa;pa = arr; //  等价于pa = &arr[0]

什么是指针?
指针是一种专门存放地址的变量,它的值代表一个内存单元,对其操作可以简介对其内变量操作故名指针
指针有多少个字节?
不同电脑的不一样32位系统4个字节,64位的电脑8个字节

4. 指针运算

  • 指针运算是以指针变量所存放的地址量作为运算量而进行的运算
  • 指针运算的实质就是地址的计算
  • 指针运算的种类是有限的,它只能进行赋值运算、算数运算和关系运算。‘

在这里插入图片描述

①指针加减:

在这里插入图片描述

px+n表示的实际位置的地址量是:

  • (px)+sizeof(px的类型) * n

px-n表示的实际位置的地址是:

  • (px)-sizeof(px的类型) * n

注意:

  • 不同数据类型的两个指针实行加减法整数运算是没有意义的
  • 两个指针相减运算
    • px-py运算的结果是两个指针指向的地址位置之间相隔数据的个数。
    • 因此两个指针相减不是两个指针持有的地址值相减的结果。
    • 两个指针相减的结果值不是地址量,而是一个整数值,表示两指针之间相隔数据的个
      数。

px++, ++px, px–, --px运算

在这里插入图片描述

②指针的关系运算符

  • 两个指针之间的关系运算符表示它们指向的地址位置之间的关系,指向地址大的指针
    大于指向地址小的指针
  • 指针与一般整数变量之间的关系运算没有意义。但可以和零进行等于 或不等于的关系
    运算,判断指针是否为空。

在这里插入图片描述

http://www.lryc.cn/news/385626.html

相关文章:

  • Oracle中 ROW_NUMBER()的语法及在对应不同需求下应如何使用
  • 德邦快递大件可以寄2米长物品吗?大件跨省行李用哪个快递便宜?
  • C# 在WPF .net8.0框架中使用FontAwesome 6和IconFont图标字体
  • 万能自定义预约小程序源码系统 适合任何行业在线预约报名 前后端分离 带完整的安装代码包以及搭建教程
  • 【MySQL备份】mysqldump篇
  • 控制台扫雷(C语言实现)
  • 操作系统期末复习 | 批处理程序 | PV实现同步互斥 | 调度算法 | 页面置换算法 | 磁盘调度算法
  • 字符串的六种遍历方式
  • 在码云(Gitee)上建立分支(Branch)的步骤如下:
  • JVM专题四:JVM的类加载机制
  • Python爬取中国天气网天气数据.
  • EXCEL快速填充空白内容
  • CBSD创建和管理bhyve容器Ubuntu@FreeBSD
  • STM32开发实战:SPI接口在W25Q64 Flash存储器中的应用
  • python一些进阶用法:hook 钩子函数以及Registry机制
  • 工作实践:11种API性能优化方法
  • 正版软件 | WIFbox:智能化文件管理工具,让效率与隐私并行
  • Postman接口工具实战
  • 江协科技51单片机学习- p17 定时器
  • 【D3.js in Action 3 精译】前言
  • Java SE入门及基础(58) 并发 进程与线程概念
  • 放松一下,简简单单了
  • 【智能制造-5】数采和电机
  • 【软考论文】论信息系统的安全性与保密性设计
  • 【图文教程】电脑查看显卡GPU温度方法:小白也能秒懂!
  • Qt的智能终端项目文档完整版
  • SQL面试题练习 —— 查询最近一笔有效订单
  • 分享HTML显示2D/3D粒子时钟
  • Java——IDEA使用
  • 高性能STL库 EASTL 、高性能JSON库