测量int数组的元组数

时间:2013-04-23 10:27:58

标签: c gcc

我使用宏来获取整数数组的元素数,并且我可以在main函数中获得整数数组的正确结果,但是如果我使用getData函数我得到了错误的答案并将整数数组的指针作为参数发送。我想知道为什么我得到了错误的答案。谢谢!

我的程序代码如下:

#include <stdio.h>

#define LENGTHOFINTARRAY(intArray) ((int)(sizeof(intArray)/sizeof(int)))

int main (int argc, char *argv[])
{
    int a[] = {5,8,9,4,11,7,15,25,1};

    int getData(int *data);
    printf("%d\n", LENGTHOFINTARRAY(a));
    getData(a);

    return 0;
}

int getData(int *data)
{
    int i = 0;
    for(i; i < LENGTHOFINTARRAY(data); i++)
    {
        printf("%d, %d\n", LENGTHOFINTARRAY(data), data[i]);
    }

    return 1;
}

我的程序结果是:

9

1,5

我使用gcc作为我的编译器。

3 个答案:

答案 0 :(得分:0)

int* data的类型只是int*,而不是int[9]中的mainint*的大小是任何其他指针的大小(通常为4或8个字节)。无法从指针获取数组的大小。 并且由于数组不能通过C中的值传递(除非在结构或其他内部),您必须传递数组的长度。

答案 1 :(得分:0)

getData()data视为int*。它不知道它有多长。

您无法确定作为指向函数的指针传递的数组的大小。

答案 2 :(得分:0)

正如您所定义的

int a[] = {5,8,9,4,11,7,15,25,1};

    int getData(int *data);
    printf("%d\n", LENGTHOFINTARRAY(a));
    getData(a);

所以当你调用“getData(a)”时,这意味着你将第一个元素的地址作为&amp; a [0]传递;

所以你在里面运行getData()作为

int getData(int *data)
{
    int i = 0;
    for(i; i < LENGTHOFINTARRAY(data); i++)
    {
        printf("%d, %d\n", LENGTHOFINTARRAY(data), data[i]);
    }

    return 1;
}

数据只是指向整数&amp;的指针。它获取a [0]的指针或地址; 所以你的宏现在将数据视为指向int的指针。这会导致你的结果。