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

Abh*_*pta 0 c

可能重复:
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)

Ant*_*les 8

通常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以获得更具体的答案.

  • 在这种情况下,点击那个小接受按钮会很好,这样其他人就知道这个问题已经解决了.我也注意到你有另外一个问题有很多答案,但没有接受答案. (2认同)