0

我试图找出一个数组的长度,但我得到了奇怪的数字……</p>

#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);

这是我的代码,直到我需要坐标主数组的长度为止。但我得到 a = 8 和 b = 12。

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

我究竟做错了什么?

4

4 回答 4

7

sizeof(coordinatesMainArray)给你coordinatesMainArray变量的大小 - aCoordinate*

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

顺便说一句,没有办法使用指针来确定数组的大小。您需要单独存储数组大小,并将它以及数组指针传递给其他函数,或者保证数组以已知的终止符值结尾(例如NULL

于 2013-06-18T11:59:07.120 回答
1

在这种情况下sizeof,只会返回coordinatesMainArray指针的大小(不管其内容的大小),因为它是在运行时分配的。

于 2013-06-18T11:59:23.113 回答
0

sizeof(coordinatesMainArray)给你sizeof(Coordinate *)sizeof(coordinatesMainArray[0])给你sizeof(Coordinate)

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

于 2013-06-18T12:00:16.987 回答
0

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

在您的示例中,您刚刚获得了指针 (a) 的大小和单个结构 (b) 的大小。

于 2013-06-18T12:01:45.867 回答