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

Nim*_*hai 0 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);
Run Code Online (Sandbox Code Playgroud)

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

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

我究竟做错了什么?

sim*_*onc 7

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

sizeof(coordinatesMainArray[0])给出coordinatesMainArray数组中第一个元素的大小- 一个Coordinate实例.sizeof(*coordinatesMainArray)本来就相当于此.

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