c – 指向数组的指针与指向数组第一个元素的指针之间的区别

前端之家收集整理的这篇文章主要介绍了c – 指向数组的指针与指向数组第一个元素的指针之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
int(* arr)[5]表示arr是指向5个整数数组的指针.现在究竟是什么指针?
如果我声明int arr [5],其中arr是指向第一个元素的指针,它是一样的吗?
这两个例子的arr是一样的吗?
如果没有,那究竟什么是指向数组的指针?
@H_301_6@解决方法
在运行时,指针是一个“只是一个指针”,无论它指向什么,差异是语义的;与指向元素的指针相比,指向数组的指针传达了一种不同的含义(对编译器)

在处理指向数组的指针时,您指向的是指定大小的数组 – 编译器将确保您只能指向该大小的数组.

即此代码将编译

int theArray[5];
int (*ptrToArray)[5];
ptrToArray = &theArray;    // OK

但这会打破:

int anotherArray[10];
int (*ptrToArray)[5];
ptrToArray = &anotherArray;    // ERROR!

处理指向元素的指针时,可以指向内存中具有匹​​配类型的任何对象. (它甚至不一定需要在数组中;编译器不会做出任何假设或以任何方式限制您)

int theArray[5];
int* ptrToElement = &theArray[0];  // OK - Pointer-to element 0

和..

int anotherArray[10];
int* ptrToElement = &anotherArray[0];   // Also OK!

总之,数据类型int *并不意味着任何数组知识,但数据类型int(*)[5]意味着一个数组,它必须包含5个元素.

猜你在找的C&C++相关文章