指针与数组的关系

指针,截指针,数组指针,指针数组,指针与数组关系 换句话说,swap里的a,b和main函数的a,b是不同的(就像世界上同名的人有很多),这里的a,b也不是一个。定义:数组指针实际上是一个指针变量,指向数组的指针变量(数组的指针),指向的是整个数组。int(*p)[4]变量类型可以看成int[4],int[4]+1并不是添加一个字节而是添加整个数组的大小,4个int=4*4=16bit,所以说int[4]+1会跳过16个字节。*p单独出现,前面没有类型(如上文里的int)就是解指针,如代码里p=&a,说明p存的是a的地址,*p就可以获取a的值。 阅读详情
指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。
  1.指针与数组的关系
  当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如:
  char str[20], *ptr;
  ptr=str;
  ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之不成立),这样原来对数组的处理都可以用指针来实现。如对数组元素的访问,既可以用下标变量访问,也可以用指针访问。
  2.指向数组元素的指针
  若有如下定义:
  int a[10], *pa;
  pa=a;
  则p=&a[0]是将数组第1个元素的地址赋给了指针变量p。
  实际上,C语言中数组名就是数组的首地址,所以第一个元素的地址可以用两种方法获得:p=&a[0]或p=a。
  这两种方法在形式上相像,其区别在于:pa是指针变量,a是数组名。值得注意的是:pa是一个可以变化的指针变量,而a是一个常数。因为数组一经被说明,数组的地址也就是固定的,因此a是不能变化的,不允许使用a++、++a或语句a+=10,而pa++、++pa、pa+=10则是正确的。由此可见,此时指针与数组融为一体。
  3.指针与一维数组
  理解指针与一维数组的关系,首先要了解在编译系统中,一维数组的存储组织形式和对数组元素的访问方法。
  一维数组是一个线形表,它被存放在一片连续的内存单元中。C语言对数组的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。
  实际上编译系统将数组元素的形式a[i]转换成*(a+i),然后才进行运算。对于一般数组元素的形式:<数组名>[<下标表达式>],编译程序将其转换成:*(<数组名>+<下标表达式>),其中下标表达式为:下标表达式*扩大因子。整个式子计算结果是一个内存地址,最后的结果为:*<地址>=<地址所对应单元的地址的内容>。由此可见,C语言对数组的处理,实际上是转换成指针地址的运算。
  数组与指针暗中结合在一起。因此,任何能由下标完成的操作,都可以用指针来实现,一个不带下标的数组名就是一个指向该数组的指针。
  4.指针与多维数组
  用指针变量可以指向一维数组,也可以指向多维数组。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。
  例如,在一个三维数组中,引用元素c[i][j][k]的地址计算最终将换成:*(*(*(c+i)+j)+k)。了解了多维数组的存储形式和访问多维数组元素的内部转换公式后,再看当一个指针变量指向多维数组及其元素的情况。
  1 指向数组元素的指针变量
  若有如下说明:
  int a[3][4];
  int *p;
  p=a;
  p是指向整型变量的指针;p=a使p指向整型二维数组a的首地址。
  *(*(p+1)+2)表示取a[1][2]的内容;*p表示取a[0][1]的内容,因为p是指向整型变量的指针;p++表示p的内容加1,即p中存放的地址增加一个整型量的字节数2,从而使p指向下一个整型量a[0][1]。
  2 指向由j个整数组成的一维数组的指针变量
  当指针变量p不是指向整型变量,而是指向一个包含j个元素的一维数组。如果p=a[0],则p++不是指向a[0][1],而是指向a[1]。这时p的增值以一维数组的长度为单位。
  5.指针与字符数组
  C语言中许多字符串操作都是由指向字符数组的指针及指针的运算来实现的。因为对于字符串来说,一般都是严格的顺序存取方式,使用指针可以打破这种存取方式,更为灵活地处理字符串。
  另外由于字符串以′\0′作为结束符,而′\0′的ASCII码是0,它正好是C语言的逻辑假值,所以可以直接用它作为判断字符串结束的条件,而不需要用字符串的长度来判断。C语言中类似的字符串处理函数都是用指针来完成,使程序运行速度更快、效率更高,而且更易于理解。
第9集:AI 驱动的智能日志分析!用 RAG 实现秒级日志检索与异常检测 文章摘要:AI驱动的智能日志分析系统 本文介绍了一个基于RAG(检索增强生成)技术的智能日志分析解决方案,旨在解决传统日志系统中的三大痛点:机械的关键词搜索、缺乏语义理解、告警与日志割裂。系统通过以下步骤实现: 环境准备:安装必要的Python依赖库,包括日志处理、Elasticsearch/Loki连接和时序异常检测工具。 核心设计:构建日志处理流水线,分为日志采集、向量化存储和AI检索分析三个阶段,创建专门的日志分析Agent。 技术实现:使用ChromaDB存储日志向量,通过HuggingFace E 阅读详情

相关推荐

Calibre提参实战:如何用hcell和xcell文件精准屏蔽模块(附避坑指南)

本文详细解析了Calibre提参过程中hcell和xcell文件的应用技巧,帮助工程师精准屏蔽模块以优化寄生参数提取。通过对比hcell与xcell的核心差异、图形界面与命令行操作指南,以及常见问题排查方法,提升芯片后端设计效率。附避坑指南,解决EETOP论坛热议的模块丢失问题。

weixin_26795617的博客 440

数组与指针关系

数组与指针的关系

qq_41727421的博客 4990

国产数据库迁移必看:达梦到ES的CDC方案优化全记录(含完整代码)

本文详细记录了从达梦数据库到Elasticsearch的CDC方案优化全过程,涵盖触发器方案局限性、Debezium架构优势及完整代码实现。通过Flink集成和性能调优,实现毫秒级延迟同步,显著降低数据库负载,为国产数据库迁移提供可落地的技术方案。

weixin_29079671的博客 500

指针与数组的关系及运算

一、概念: 1.1、指针:指针变量p的值是地址,“*”为取数据符,*p表示取p所指向的地址中的数据,“&”为取地址符。 1.2、数组:数组是用于储存连续多个相同类型数据在内存中的集合。 1.3、指针与数组的关系:指针变量p是个地址,而数组的数组名a也是个地址,从而可以这样赋值p=a,由此衍生的指针数组、数组指针所产生的表达式及运算千变万化,经常看到一个表达式都不知道,最终所求的值是地址还是数据。网络上看了好多推演的教程,也思考了很久,但看到好多推演断层式的表达式,还是想不明白。最终自己找...

oO斯曼的博客 7078

零代码进行单细胞数据全流程分析教程

我开发的本地电脑无限使用无限分析作图的生信零代码一键分析电脑软件神器OmicsTools 软件在github上的zihaoxingstudy1/OmicsTools仓库 中,大家可以下载安装OmicsTools进行各种生信分析和可视化作图。

qq_40073899的博客 3628

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7450

十一:数组和指针的关系?

十一:数组和指针的关系:区别和联系;

qq_26538113的博客 3828

【科研绘图】【数据拟合曲线】:附Origin详细画图流程

拟合曲线图

weixin_50236590的博客 4万+

【C语言】数组和指针的关系

int a[10];char b[15];int c[10];//定义了 int[10]类型的数组指针,指向ap=&c;//指向c//定义了 char[15]类型的数组指针,指向b指针类型 数组名[数组元素个数];数组指针和指针数组1.学习要点:当成语文的阅读理解,掌握中心词就能搞定问题数组指针 -->中心词是指针,前面的数组用来修饰概念: 只要一个指针指向整数的地址,我们就把这个指针叫做int *只要一个指针指向字符串的地址,我们就把这个指针叫做char *

qq_62917398的博客 2927

YOLOV5 自动刷图脚本实战(十五)之如何找到正确的门

DXF是一个2D游戏,我们所看到的人物移动,其实是后面的背景在移动,我们所看到的画面,不过是一个完整背景中的一个镜头视角而已想要正确找到门的坐标,我们需要对不同的地图中的每个房间做一些配置信息。

qq_38892949的博客 2812

如何使用rdma-core来实现RDMA操作

rdma-core 是一个开源项目,为远程直接内存访问(RDMA)提供用户空间的支持。它包括 RDMA 设备的驱动程序、库和工具,旨在简化 RDMA 应用的开发和部署。

嵌入式技术开发 3898

指针与数组的基本关系

指针与数组在C语言中有着密切的关系。理解它们之间的联系不仅可以帮助我们更好地掌握C语言的基础知识,还能提高代码的灵活性和效率。通过合理使用指针和数组,我们可以更高效地处理内存和数据结构。希望本文能够帮助你深入理解指针与数组的关系及其应用。如果你有任何疑问或需要进一步探讨,请随时留言交流!

2501_90303633的博客 1869

深入URP之Shader篇1: URP Shader概述

我们知道,URP和HDRP都是基于SRP的,尽管现在可以使用Shader Graph编写Shader,但是手写Shader仍然是有一定的优势,特别是在性能方面,手写Shader可以更极致的优化,因此我们在项目中前期都是直接使用Shader Graph编写Shader,项目后期会改成手写Shader来提高性能。而在SRP中手写Shader,我们仍然使用的是Shader Lab,这个结构并没有太大的变化,但是SRP Shader中使用Shader Lab语言还是有几点不同。

聚焦游戏和图形引擎开发技术 4638

二级指针与指针数组之间不清不楚的关系

在初次学习指针的时候,无论是初始化一维数组(下面的func函数),还是访问一维数组(showArr函数),发现一维数组名与一级指针有着强烈等价的关系。于是二维数组与二级指针有这强烈的关系的思想便油然而生,然而事实上,二维数组与二级指针没有半毛钱的关系。 (1)一维数组与一级指针的关系不必说,直接看代码: #include <stdio.h> #include <stdlib...

qq_36065506的博客 612

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

指针变量与数组的关系及什么是指针数组

指针变量与数组的关系及什么是指针数组: 一维数组: 数组原本就是以指针的格式使用的,数组名a相当于char * const a。但这里需要注意的是数组名表示的是一个数组的首地址,是一个地址常量,不能给地址常量赋值,但能改变该地址所指向的内容,比如之前a首地址存放的内容为1,可以使用a=2改变该地址单元里的内容。 在输出数组元素的值时一般以a[0]形式输出,该a[0]形式相当于a、*(a+0)。...

u013581207的博客 4763

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数组与指针的关系

数组、指针

Parzaifal的博客 982

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

二维数组与指针的关系详解

静态二维数组与指针 我们定义一个二维数组int a[3][4]。 二维数组实际是由多个一维数组组成,在这里,a[3][4]就是由3个长度为4的一维数组组成的二维数组。并且它们在空间上是连续的,相当于一个长为12的一维数组。 数组类型说明 a的类型为int(*)[4],数组指针(后面动态数组还会出现指针数组,注意区别),是指向第一个一维数组的指针,即a所指向的类型为一个一维数组。 ...

qq_40692109的博客 7216

浅谈指针与数组的关系

1、实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的。 2、数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址。 3、数组与指针的关系是因为数组下标操作符[],比如,int a[3][2]相当于*(*(a+3)+2) 。 4、指针是一种变量,也具有类型,其占用内存空间大小和系统有关,一般32位系统下,sizeof(指针变量)=4。 5、指针可以进行加减算术运算...

qq_21110983的博客 3104

指针和数组的关系,指针和函数的关系

指针和数组的关系,指针和函数的关系 1、指针和一维数组的关系 int arr [10] = {1,2,3,4,5,6,7,8,9,0}; 数组名是一个指针常量,表示数组第一个元素的的起始地址。 如 int a[5]; a表示数组第一个元素a[0]的起始地址&a[0]。 换句话说:数组名就是数组的首地址。 arr[0] = 1; arr[2] = 3; arr[1] = 2; arr[...

qq_45510453的博客 687

指针与数组的关系解析

数组名在大多数场景下会被隐式转换为指向数组首元素的指针(地址),且这个指针是(不可被修改)。无论是通过数组下标还是指针偏移,最终都会被编译器转换为 “基地址 + 偏移量” 的内存访问。例如访问第 3 个元素(下标为 2):这种兼容性使得在函数参数中,数组会被自动退化为指针。例如函数void func(int a[])与void func(int* a)完全等价,函数内部无法通过sizeof(a)获取数组长度(只能得到指针大小)。

2401_85199775的博客 666

c语言中数组与指针的关系

/来源网络,仅限个人学习记录适用/ 指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。   1.指针与数组的关系   当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。 如:   char str[20], *ptr;   ptr=str;   ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之

hh_buddy的博客 4652

【C】数组和指针的关系

数组和指针的关系

weixin_44939430的博客 915

数组,指针,函数之间的关系

/这里的parr是指向二维数组第一行元素的地址,因此parr+1表示指向行标为1的数组的地址,对此解引用就拿到了行标为1的首元素的地址,因此*(parr+1)+2表示行标为1,列标为2的元素的地址,在通过一次解引用就拿到了行标为1,列标为2的元素,//首先parr表示首元素的地址,+2表示拿到arr+2的地址,对其解引用,表示拿到的是一个指向数组的指针,对其解引用,表示拿到这个数组的首元素地址,+2表示这个数组下表为2的元素的地址,对其解引用就得到的是11。//等效为int e=padd(2,3);

2403_88445256的博客 856
上一篇: fileno(FILE)
下一篇: shell算数运算 let 和 expr
lamdoc
博客等级 码龄18年 155粉丝 655原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值