通过引用指针来复制数组的说明

时间:2012-07-17 18:12:56

标签: c arrays pointers

所以我在这个头文件中有这个数组:

// header.h
static const unsigned int array1[]={0x00,0x01,0x02,0x03};

// file.c
main()
{
     unsigned int *ptrToArray;

     ptrArray = &array1[0];
 }

如果我错了,请纠正我。我假设:要找到数组元素的字节数,而不是sizeof(array1),等价物将是sizeof(*ptrArray),对吗?

要访问数组的元素,而不是array[i],现在它将是:

  • *(ptrArray)代表第一个元素,
  • *(ptrArray+1)第二个元素对吧?

4 个答案:

答案 0 :(得分:4)

*ptrToArray的类型为int,因此sizeof(*ptrToArray)sizeof(int)相同。所以它不会告诉你关于array1中元素数量的任何信息。

虽然你可以写*(ptrArray+1)等,但你应该写ptrToArray[1]

答案 1 :(得分:2)

指针不是数组,数组不是指针。方便时,数组可以衰减到指针中,但它仍然是一个完整的类型。

因此,*someIntPointer的类型是int,而不是数组,即使该指针恰好指向数组中的第一个元素。 sizeof(someArray)正如您所期望的那样工作,因为它知道该类型实际上是一个数组。

答案 2 :(得分:0)

sizeof 不会以相同的方式为您的指针行事:您的示例将为您提供数据类型的大小unsigned int

虽然您可以使用指针算法通过ptrArray引用元素,但您也可以使用标准数组解除引用:ptrArray[0]ptrArrray[1],...在大多数情况下,您这样做会更好。

答案 3 :(得分:-2)

Sizeof将返回常规指针类型的指针大小。如果你指定了一个解除引用的指针类型的大小,你将获得该元素的大小(即sizeof(unsigned int))。您需要自己跟踪数组中元素的数量,或者在数组声明中使用sizeof。

至于访问,您可以这样做,但您可以像使用普通数组一样使用括号表示法。

数组是一个特殊的指针类。编译器知道何时将数组视为数组以及何时将其视为指针:这就是它如何知道数组的大小,但是你仍然可以将它传递给期望数组的函数(当你这样做时,你得到指向第一个元素的指针。但是相反的方法不起作用:编译器永远不会将声明为指针的指针视为数组。

顺便说一下,[]只是简化了指针算术。您可以添加指向int的指针,但您也可以向指针添加int。因此,你可以(但可能不应该)做一些奇怪的事情,比如1[ptrArray]