我正在试图找出数组的长度,但我得到了奇怪的数字......
#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.
我假设我会得到两个相似的大小,所以它显示我的数组中有一个元素。
我做错了什么?
答案 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)。