-2

我使用宏来获取整数数组的元素个数,我可以在主函数中得到整数数组个数的正确结果,但是如果我使用 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 作为我的编译器。

4

3 回答 3

0

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

于 2013-04-23T10:30:33.463 回答
0

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

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

于 2013-04-23T10:31:39.390 回答
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)”时,这意味着您将第一个元素的地址作为 &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;
}

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

于 2013-04-23T10:51:19.807 回答