如何从指针变量计算数组的大小?

时间:2012-02-22 07:18:55

标签: c arrays pointers

我有数组的指针(数组在内存中)。 我可以从指针计算数组的大小吗? 我实际上不知道数组在内存中的位置。 我只得到指针地址(假设9001) 使用该地址我必须计算数组大小。

感谢。

3 个答案:

答案 0 :(得分:11)

不,你无法计算数组的大小。 C中的对象不携带类型信息,因此您必须提前安排知道数组的大小。像这样:

void my_function(int array[], int size);

答案 1 :(得分:5)

你不能在C中执行此操作。指针的大小是指针的大小,而不是可能指向的任何数组的大小。

如果最终得到一个指向数组的指针(显式地使用类似char *pch = "hello";或隐式使用数组衰减,例如将数组传递给函数),则需要单独保存大小信息,有类似的东西:

int twisty[] = [3,1,3,1,5,9];
doSomethingWith (twisty, sizeof(twisty)/sizeof(*twisty));
:
void doSomethingWith (int *passages, size_t sz) { ... }

以下代码说明了这一点:

#include <stdio.h>

static void fn (char plugh[], size_t sz) {
    printf ("sizeof(plugh) = %d, sz = %d\n", sizeof(plugh), sz);
}

int main (void) {
    char xyzzy[] = "Pax is a serious bloke!";
    printf ("sizeof(xyzzy) = %d\n", sizeof(xyzzy));
    fn (xyzzy, sizeof(xyzzy)/sizeof(*xyzzy));
    return 0;
}

我系统的输出是:

sizeof(xyzzy) = 24
sizeof(plugh) = 4, sz = 24

因为24字节数组在函数调用中衰减为4字节指针。

答案 2 :(得分:0)

没有。 C中的数组没有这个信息。你应该用这个数据保存一个变量“next”到数组。

如果您拥有自己的数组,则可以使用sizeof在编译阶段获取其大小。

char array1[XXX];
char* pointer1 = array1;
sizeof(array1); // this is XXX
sizeof(pointer1); // this is the size of a pointer in your system

您应该执行以下操作并在程序中使用该变量(或在将数组传递给函数时将其传递给函数)

int array1size = sizeof(array1);