品易云推流 关闭
文章详情页
文章 > C语言教程 > 数组指针和指针数组的区别

数组指针和指针数组的区别

头像

小妮浅浅

2021-07-13 17:08:43868浏览 · 0收藏 · 0评论

区别

1、指针数组本身是一个数组,数组的元素都是指针,即数组存储的是指针,数组占多少个字节由数组本身决定。

2、数组指针本身是一个指针,它指向一个数组,即它是指向数组的指针,在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语言学习指路:C语言教程

本文转载于php中文网,如有侵犯联系作者修改。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

底部广告图