数组指针和指针数组的区别是什么

区别:指针数组本身是一个数组,数组的元素都是指针,即数组存储的是指针,数组占多少个字节由数组本身决定;而数组指针本身是一个指针,它指向一个数组,即它是指向数组的指针,在32位系统下永远占4字节。

数组指针和指针数组的区别是什么

本教程操作环境:windows7系统、c99版本、Dell G3电脑。

对指针数组和数组指针的概念,相信很多C程序员都会混淆。下面通过两个简单的语句来分析一下二者之间的区别,示例代码如下所示:

int *p1[5];int (*p2)[5];

登录后复制

首先,对于语句“int*p1[5]”,因为“[]”的优先级要比“*”要高,所以 p1 先与“[]”结合,构成一个数组的定义,数组名为 p1,而“int*”修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个指向 int 类型数据的指针,如图 1 所示,因此,它是一个指针数组。

1.jpg

其次,对于语句“int(*p2)[5]”,“()”的优先级比“[]”高,“*”号和 p2 构成一个指针的定义,指针变量名为 p2,而 int 修饰的是数组的内容,即数组的每个元素。也就是说,p2 是一个指针,它指向一个包含 5 个 int 类型数据的数组,如图 2 所示。很显然,它是一个数组指针,数组在这里并没有名字,是个匿名数组。

2.jpg

由此可见,对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于它指向的数组占多少字节,这个不能够确定,要看具体情况。

了解指针数组和数组指针二者之间的区别之后,继续来看下面的示例代码:

int arr[5]={1,2,3,4,5};int (*p1)[5] = &arr;/*下面是错误的*/int (*p2)[5] = arr;

登录后复制

不难看出,在上面的示例代码中,&arr 是指整个数组的首地址,而 arr 是指数组首元素的首地址,虽然所表示的意义不同,但二者之间的值却是相同的。那么问题出来了,既然值是相同的,为什么语句“int(*p1)[5]=&arr”是正确的,而语句“int(*p2)[5]=arr”却在有些编译器下运行时会提示错误信息呢。

其实原因很简单,在 C 语言中,赋值符号“=”号两边的数据类型必须是相同的,如果不同,则需要显示或隐式类型转换。在这里,p1 和 p2 都是数组指针,指向的是整个数组。p1 这个定义的“=”号两边的数据类型完全一致,而 p2 这个定义的“=”号两边的数据类型就不一致了(左边的类型是指向整个数组的指针,而右边的数据类型是指向单个字符的指针),因此会提示错误信息。

相关推荐:《C语言视频教程》

以上就是数组指针和指针数组的区别是什么的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2431985.html

(0)
上一篇 2025年3月3日 08:52:52
下一篇 2025年2月28日 19:40:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • c语言数组怎么初始化

    方法:1、定义数组时给所有元素赋初值,例“int a[5]={1,2,3,4,5}”;2、给一部分元素赋值,例“int a[5]={1,2}”;3、定义时不指定数组长度,直接给所有元素赋初值,例“int a[]={1,2,3,4,5}”。 …

    2025年3月3日
    200
  • 汇编语言和c语言的区别有哪些

    区别:1、汇编语言效率高,C语言效率比较低;2、汇编语言对硬件的可操控性强,C语言硬件可操控性比较差;3、汇编语言目标代码体积小,C语言目标代码体积大;4、汇编语言不易维护,C语言容易维护;5、汇编语言可移植性很差,C语言可移植性很好等。 …

    2025年3月3日
    200
  • c程序是由什么构成

    c程序是由函数构成,是由一个main函数和若干个其他函数构成的。函数是C程序的基本单位,被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己定义的函数。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 C源程…

    2025年3月3日
    200
  • c语言中形参的缺省存储类别是什么

    c语言中形参的缺省存储类别是auto;形式参数用关键字auto作存储类别的声明时,关键字“auto”可以省略,auto不写则隐含确定为“自动存储类别”,它属于动态存储方式。 本文操作环境:Windows7系统、C11、Dell G3电脑。 …

    2025年3月3日
    200
  • c语言中node是什么意思

    在C语言中,node是用于定义链表结点的名称,通常在数据结构中用作结点的类型名,语法为“struct Node{…};”;结构和类在定义出名称以后,直接用该名称就可以定义对象,C语言中还存在“Node * a”和“Node* &…

    2025年3月3日
    200
  • 聊聊如何利用纯C语言对EXCEL进行读写操作

    如何利用纯c语言对excel进行读写操作?下面本篇文章给大家介绍一下通过纯c语言进行excel读写操作的方法,希望对大家有所帮助! 在之前需要使用C语言读取Excel文件内容的功能,查阅了很多资料,大部分是通过ODBC或者过OLE/COM对…

    2025年3月3日 编程技术
    200
  • C语言入门之聊聊基础知识(数据类型、变量、函数、数组等)

    本篇文章带大家学习一下c语言,聊聊c语言的基础知识(数据类型、变量、函数、数组等),希望对大家有所帮助! 什么是C语言 简单来说 C语言就是一门计算机语言,广泛应用与底层开发,使用语言写代码程序,解决问题所以说对于计算机这一专业来说C语言和…

    2025年3月3日 编程技术
    200
  • c语言中关键字有多少个

    C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。数据类型关键字有12个,包括char、double、float、int等;控制语句关键字有12个,包括for、break、i…

    2025年3月3日
    200
  • c语言中case是什么意思

    在c语言中,case的意思为“情况”、“案例”,是用于switch语句的关键字。“switch case”语句是一种选择结构的语句,允许测试变量与值列表的相等性,每个值称之为案例或者case;程序会检查switch后面的值并且与case后面…

    2025年3月3日 编程技术
    200
  • c语言中的标识符是由什么组成

    在c语言中,标识符由字母(A~Z和a~z)、数字(0~9)、下划线(_)组成,且第一个字符必须是字母或下划线,不能用其他任何字符或数字开头;标识符是区分大小写的,大写字母和小写字母被认为是不同的字符,且标识符不能是关键字。 本教程操作环境:…

    2025年3月3日
    200

发表回复

登录后才能评论