我使用宏来获取整数数组的元素数,并且我可以在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作为我的编译器。
答案 0 :(得分:0)
int* data
的类型只是int*
,而不是int[9]
中的main
。 int*
的大小是任何其他指针的大小(通常为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的指针。这会导致你的结果。