指针数组与数组指针

指针,截指针,数组指针,指针数组,指针与数组关系 换句话说,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的值。 阅读详情

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针
数组指针:a pointer to an array,即指向数组的指针
还要注意的是他们用法的区别,下面举例说明。
int* a[4] 指针数组
表示:数组a中的元素都为int型指针
元素表示:a[i] (a[i])是一样的,因为[]优先级高于*

int (*a)[4] 数组指针
表示:指向数组a的指针
元素表示:(*a)[i]

我们先看维基百科中对于数组指针的解释:
数组名出现在表达式中时,绝大多数情况(除了数组名作为sizeof的操作数或者作为取地址&元素符的操作数)会被隐式转换为指向数组的首个元素的指针右值。
当数组名作为取地址&元素符的操作数,则表达式的值为指向整个数组的指针右值。
例子:

char s[]="hello";

int main() {
  char (*p1)[6]=&s; //OK!
  char (*p2)[6]=s; //compile error: cannot convert 'char*' to 'char (*)[6]'   
  char *p3=&s;//compile error: cannot convert 'char (*)[6]' to 'char*' 
}

根据上述C语言标准中的规定,表达式 &s 的值的类型是char ()[6],即指向整个数组的指针;而表达式 s 则被隐式转换为指向数组首元素的指针值,即 char 类型。同理,表达式 s[4] ,等效于表达式 *(s+4)。
对于上面的内容中提到的“当数组名作为取地址&元素符的操作数,则表达式的值为指向整个数组的指针右值。”我们参考如下程序进行理解:

#include <stdio.h>
int main ()
{
    int a[5] = {1,2,3,4,5};
    int *p = (int*)(&a + 1);//&a表示整个数组的地址
    printf("%d %d\n" , *(a + 1), *(p - 1));
    printf("%p\n",&a);
    printf("%p\n",&a+1);
    return 0;
}
//输出结果为:
2 5
0x7ffc113aad80
0x7ffc113aad94

这是一道非常常见的C语言面试题。
0x7ffc113aad94-0x7ffc113aad80=0x14=20
因此可以判断&a表示整个数组,对&a+1将会偏移整个数组的大小。
a[0] 0x7ffc113aad80
a[1] 0x7ffc113aad84
a[2] 0x7ffc113aad88
a[3] 0x7ffc113aad8C
a[4] 0x7ffc113aad90
因此&a+1指向的是a[5],使用*(p-1)即可访问a[4]的元素。

#include <stdio.h>

int main()
{
    int a = 10;
    int b = 20;
    int c = 30;
    int d = 40;
    int e = 50;
    /*指针数组*/
    int *p[5]={&a,&b,&c,&d,&e};
    printf("a = %d\n",*p[0]);

    /*数组指针*/
    int arr[5] = {10,20,30,40,50};
    int (*ptr)[5] = &arr;
    printf("%d\n",(*ptr)[0]);
    return 0;
}
【C语言的数组指针,指针数组及数组与指针的区别】 本文重点强调了如何区分数组指针和指针数组,还有数组和指针的区别。 阅读详情

相关推荐

从‘包饺子’到‘包络线’:一个生活化比喻讲透长期与短期成本决策

本文通过饺子馆经营的生活化比喻,深入浅出地解析了长期与短期成本决策的核心逻辑。从调整人力(可变成本)到扩建厨房(固定成本),揭示了包络线理论在商业决策中的实际应用,帮助企业主在规模经济与成本控制间找到平衡点。

weixin_32006655的博客 338

指针数组和数组指针

容易混淆,在中间加‘的’比较好理解, 即指针的数组(表示数组里面全是指针);数组的指针(表示这个指针是指向数组的)。 目录 (1)指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针 (2)数组指针:a pointer to an array,即指向数组的指针 (3)USE (1)指针数组:array of pointers,即用于存储指针的数组,...

#elseif 292

Python+Vue计算机毕业设计风电场监控系统的设计与实现7bd6i(程序+LW+源码+部署)

Python3.7.7+Django+Mysql5.7+pip list+HBuilderX(Vscode也行)+Vue+Pychram社区版。2. 前端:vue+css+javascript+jQuery+easyUI+highcharts。2.IDE环境:Python和Python 社区版都可以。Django + Vue +Python+Mysql 等等组成,B/S模式等等。该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。1. 后端:Python、Vue、Django、Mysql。

华信计算机毕设源码程序 340

c语言 指针 指向 数组指针的指针,c语言知识:数组指针和指针数组的区别

c语言知识:数组指针和指针数组的区别指针数组和数组指针,这两个名字不同当然所代表的意思也就不同,下面是其区别,欢迎阅读:指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针还要注意的是他们用法的区别,下面举例说明。int* a[4] 指针数组表示:数组a中的`元素都为int型指针元素表示:*...

weixin_33817046的博客 293

R语言孟德尔随机化环境搭建:手把手教你搞定gwasvcf、gwasglue等包的安装报错(附本地安装包)

本文详细介绍了R语言中孟德尔随机化环境搭建的全流程,重点解决gwasvcf、gwasglue等包的安装报错问题。从依赖关系解析到GitHub访问配置,再到离线安装方案,手把手教你搭建完整的分析环境,特别适合生物信息学新手快速上手。

weixin_29093017的博客 215

webview腾讯x5内核离线安装

离线集成腾讯TBS浏览器服务,彻底解决官方下载限流问题,永久免费

观千剑而后识器,操千曲而后晓声。 7906

数组指针数组的定义及使用(about array of pointer of array)

数组指针数组(array pointer array): 该怎么定义和使用呢? 如下: //定义  #define MsgCnt 3  #define MsgLen 8  typedef char( MsgArray )[MsgCnt][MsgLen];  typedef char( *MsgsPtr )[MsgCnt][MsgLen];    M

Faiz's Blog 643

ros_control硬件接口实战:从零构建机器人控制框架

本文详细介绍了ros_control硬件接口在机器人控制框架中的核心作用与实践方法。通过解析硬件接口类型、实现标准接口、构建主控制循环及自定义功能扩展,帮助开发者从零构建高效的机器人控制系统,提升硬件与ROS的协同效率。

lstm7chronicler的博客 498

[轉]Array of pointer VS. Pointer to Array

。前言這是二年級Programming Languages(語言結構)課程中有的內容,教導我們如何斷定一種複雜型態的方法,不過就在經過一年後的最近,我已經忘的差不多了,,在這上面的判斷上又錯誤了,而且還沒有頭緒處理,只能try on'error的將我要的部分測出來用。。問題請問下列的兩種宣告各為 Array of pointer 與 Pointer to Array的哪一種? int ...

weixin_30858241的博客 174

MIMIC数据库基本信息分析

一、MIMIC数据库中26张表介绍 数据库中一共有26张表,记录患者入院的各种信息,每张表的介绍如下所示。 表格名 信息 admission 患者基本信息,比如性别、种族、语言、宗教、婚姻、入院和出院时间、死亡时间等 callout 提供病人准备从ICU转出或者已经从ICU转出时相关信息 caregivers 记录医护人员信息(ID、类型、附加...

m0_37520426的博客 1万+

ubuntu-25.04-desktop-amd64 工具VMware-tools 正确安装方法

摘要:Ubuntu 25.04虚拟机安装VMware Tools后无法实现主机与虚拟机间的文件复制粘贴和拖拽功能,问题可能源于工具兼容性。建议优先安装open-vm-tools套件(含open-vm-tools-desktop),而非官方VMware Tools。具体方案:通过终端执行安装命令后重启系统。该方法已实测有效解决该兼容性问题。(149字)

安徽锐锋科技-沐雨潇竹 672

C语言—指针数组与数组指针

前言: 看到标题的小伙伴可能会有点疑惑,什么是指针数组,数组指针??傻傻分不清楚,不怕,听我慢慢道来。 正文: 要想弄清楚这两个概念,我们不妨举几个例子: 1、数组: int arr[5] = {1,2,3,4,5}; 这就是最简单的数组,数组中每个元素都是int类型,下面的图片帮助大家很容易理解。 数组可以将相同类型的数据整合到一起,你可以通过下标的方式或者指针的方式来访问,在这里不多赘述。 ...

weixin_44580000的博客 1万+

金融科技风险管理实践之监管评级全解

内部审计是公司治理的四大基石之一。因此,建议银行以问题与结果为导向,推动科技风险分级分类管理,重点防范重大中断、重大事件,并进一步加强科技风险评估与监测,加强对重要管理流程、重要系统、网络等重点管控环节的评估监测,对于评估发现的问题,及时完善管理手段,举一反三解决问题,提高风险管理的有效性。投入更多审计资源,加大对重点机构、薄弱环节、重要领域的审计力度,如:加强对境外机构的审计,加强网络安全、数据安全、业务连续性等高风险领域审计,加强数字化转型过程中的风险审计,以高水平安全,为数字金融高质量发展保驾护航。

银行信息系统应用架构详解 450

二维数组与指针、指针数组、数组指针的用法

二维数组和指针⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了。而每个大数组元素对应二维数组的一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组下面我们讨论指针和二维数组元素的...

gaosaixing的博客 5万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数组指针和指针数组

借用别人的博客https://blog.youkuaiyun.com/sum_tw/article/details/53540866作为自己的笔记 1、数组指针(指向数组的指针) (1)数组在内存中的表示 创建一个数组就是在内存里面开辟一块连续的空间,比如int a[4];就是在内存里面开辟了一个大小为4*sizeof(int)字节的内存空间。二维数组是特殊的一维数组。 先来看一段代码: void...

婉茹的博客 9294

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

指针数组、数组指针、数组的区别与联系

指针数组、数组指针、数组的区别与联系! 一:基本定义 1.指针数组 char *arr[4] = {"hello", "world", "shannxi", "xian"}; //arr就是我定义的一个指针数组,它有四个元素,每个元素是一个char *类型的指针,这些指针存放着其对应字符串的首地址。 (1)这个指针数组有......

魏波 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数组指针与指针数组

数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。  p=a;        //将该二...

PT的博客 1万+

指针数组,数组指针,存放数组指针的数组,指向存放数组指针数组的指针,函数指针,函数指针数组,指向函数指针数组的指针

数组:一组数据的集合称为数组,它所包含的每一个数据叫做数组元素,例如 int a[4]; 它定义了一个长度为4的整型数组,名字是a . 一般的定义数组可以用 :数据类型 数组名 [数组长度];来声明。当然数组中除了存储一般常见的数据类型外,也可以用来存放指针,此时的数组就叫指针数组。指针数组:指针数组的元素全为指针。它的声明方法是:数据类型 * 数组名[数组长度];例如int arr[5];

lrving_j的博客 6512

指针数组与数组指针的区别

a、指针数组:是指一个数组里面装着指针,也即指针数组是一个数组; 定义形式:int *a[10]; 如图所示: b、数组指针:是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已; 定义形式:int (*p)[10]; 其中,由于[]的优先级高于*,所以必须添加(*p). 区分方法: 主要看后面的两个字是什么(前面是修饰作用),因此指针数组是数组,而数组指针是指针。 ...

汤姆鱼 5万+

C++笔记 指针与数组 指针数组与数组指针

指针:C语言中某种数据类型的数据存储的内存地址,例如:指向各种整型的指针或者指向某个结构体的指针。 数组:若干个相同C语言数据类型的元素在连续内存中储存的一种形态。 数组在编译时就已经被确定下来,而指针直到运行时才能被真正的确定到底指向何方。所以数组的这些身份(内存)一旦确定下来就不能轻易的改变了,它们(内存)会伴随数组一生; 而指针则有很多的选择,在其一生他可以选择不同的生活方式,比如一个字符指针可以指向单个字符同时也可代表多个字符等。 指针和数组在C语言中使用频率是很高的,在极个别情况下,数组和

weixin_40933653的博客 2431

数组指针与指针数组的区别

数组指针与指针数组

笔墨随心 9245

指针与数组概念、指针数组、数组指针详解

指针与数组 指针可以与变量结合,也可以与数组结合使用。指针数组和数组指针是两个截然不同的概念,指针数组是一种数组,该数组存放的是一组变量的地址。数组指针是一个指针,表示该指针是指向数组的指针。 1.指向数组元素的指针 int a[5]={1,2,3,4,5}; int *p=a; //int *p=&amp;a[0]; 如上代码,指针变量p指向了a数组的首元素,其方法可有两种,int...

eternal_yy 3623

指针数组与数组指针变量

指针数组 实际是个数组,用来存储指针地址 定义: int * arr[SIZE]; 数组指针变量 用来存储数组地址的数组指针变量 定义: int intArr[5] = {....}; int (*arr)[5] = &intArr; 注意:定义数组指针变量要与实际的数组大小要一致 示例: int main() { int intArr[4] = { 1,2,3,4 }; int* pointArr[4]; //指针数组 int(*arrPoint)[4];//数组指针 arrPo

偷闲加油站 1504
上一篇: 分析C语言声明
下一篇: TLPI-Chapter 20 信号
52coder
博客等级 码龄17年 87粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值