c - (int *) 和 (int []) 是一样的吗?

标签 c

<分区>

Possible Duplicate:
gcc compile error: cast specifies array type

我想检查 (int * ) 和 (int []) 的区别。当我编译以下代码时,第一行没问题。但是对于第 2 行,我的编译器给出了以下错误:

test.c:10: error: cast specifies array type

任何人都可以告诉我这个错误的含义以及我在哪里犯错了吗?

#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;
}

最佳答案

通常 int * 是一个指针(指向一个整数)而 int[] 是一个未指定大小的数组,这就是所谓的不完整 类型。不完整的类型只能在声明中使用,必须在定义中完成。例如(以下代码位于全局范围内):

extern int[] p; //declaration of p

int p[5]; //definition of p - size must be specified

当您谈论函数参数时,情况就完全不同了。声明:

void f(int *p)

void f(int p[])

将是相同的。如果您愿意,它只是语法糖。


编辑:除此之外:如果您问数组和指针之间有什么区别:一切!我会将您链接到 C-faqs.com以获得更具体的答案。

关于c - (int *) 和 (int []) 是一样的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362781/

相关文章:

c - 错误 : variable ‘database’ has initializer but incomplete type?

c++ - 可以保证 UB 在编译时被拒绝吗?

c - MPI C 中的一般运行时间测量

c - 从C中的指针数组中删除元素

c++ - 将 char[] 转换为 char*

c - 预编译标志优化

c - 解析六边形网格

c - Makefile 不允许增量构建

C - 动态整数数组错误(代码 :Blocks/Visual Studio)

c++ - 了解 C 类型定义