计算数组的长度给出了奇怪的结果

时间:2013-06-18 11:57:18

标签: c

我正在试图找出数组的长度,但我得到了奇怪的数字......

#include <stdio.h>
#include <stdlib.h>

const int numOfCoordinates = 100;

typedef struct {
    int x;
    int y;
    int counter;
} Coordinate;

Coordinate *coordinatesMainArray;
Coordinate endPoint;
Coordinate startPoint;


int main(int argc, const char * argv[])
{
    endPoint.x = 8;
    endPoint.y = 3;
    endPoint.counter = 0;

    startPoint.x = 1;
    startPoint.y = 4;

    coordinatesMainArray = malloc(sizeof(Coordinate) * 1);
    coordinatesMainArray[0] = endPoint;



    int a = sizeof(coordinatesMainArray);
    int b = sizeof(coordinatesMainArray[0]);
    int coordinatesMainArrayLength = (a / b);

这是我的代码直到部分我需要coordinateMainArray的长度。 但我得到a = 8和b = 12.

我假设我会得到两个相似的大小,所以它显示我的数组中有一个元素。

我做错了什么?

4 个答案:

答案 0 :(得分:7)

sizeof(coordinatesMainArray)为您提供coordinatesMainArray变量的大小 - Coordinate*

sizeof(coordinatesMainArray[0])为您提供coordinatesMainArray数组中第一个元素的大小 - Coordinate个实例。 sizeof(*coordinatesMainArray)本来就相当于此。

另外,没有办法使用指针来确定数组的大小。您需要单独存储数组大小,并将其与数组指针一起传递给其他函数,或者保证数组以已知终结符值结束(例如NULL

答案 1 :(得分:1)

在这种情况下,sizeof将仅返回coordinatesMainArray指针的大小(无论其内容的大小),因为它是在运行时分配的。

答案 2 :(得分:0)

sizeof(coordinatesMainArray)为您提供sizeof(Coordinate *)sizeof(coordinatesMainArray[0])为您提供sizeof(Coordinate)

首先是sizeof指针,第二个是sizeof数组元素。

答案 3 :(得分:0)

当您使用malloc分配内存时,它不会保留已分配块的大小。至少不能访问常规代码。如果你分配内存,你必须自己跟踪大小。

在你的例子中,你只得到了指针(a)的大小和单个结构的大小(b)。