可能重复:
gcc编译错误:cast指定数组类型
我想检查(int*)和(int [])的区别.当我编译以下代码时,第一行就可以了.但对于第2行,我的编译器给出以下错误:
test.c:10: error: cast specifies array type
Run Code Online (Sandbox Code Playgroud)
请问任何人请告诉我这个错误的含义以及我在哪里错了?
#include<stdio.h>
void abc(int *a)
{
int i;
for(i=0;i<2;i++)
{
printf("%d",((int * )a)[i]); //(1)
printf("%d",((int [])a)[i]); //(2)
}
}
int main()
{
int b[2]={0,1};
abc(b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通常int *
是一个指针(指向一个整数),int[]
是一个未指定大小的数组,这是一个所谓的不完整类型.不完整类型只能在声明中使用,必须在定义中完成.例如(以下代码位于全局范围内):
extern int[] p; //declaration of p
int p[5]; //definition of p - size must be specified
Run Code Online (Sandbox Code Playgroud)
当你谈论功能参数时,这是另一个故事.声明:
void f(int *p)
Run Code Online (Sandbox Code Playgroud)
和
void f(int p[])
Run Code Online (Sandbox Code Playgroud)
将是相同的.如果你愿意的话,这只是语法糖.
编辑:除此之外:如果你问的是数组和指针之间有什么区别:一切!我会将您链接到C-faqs.com以获得更具体的答案.