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

时间:2012-04-28 10:43:44

标签: c

  

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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

试试这个

void abc(int *a){ 
  int i; 

  for(i=0;i<2;i++){
     printf("%d",*(a+i));  //(1)
     printf("%d", a[i]);   //(2) 
  } 
} 

你应该花更多的时间来理解指针和数组。数组的名称是指向他的第一个元素的指针,你可以使用它们的名称来处理数组,比如内存片和指向它的指针

答案 2 :(得分:0)

完全没有。 int *表示指向内存中整数的指针。 []括号代表一个数组。 int a [10];会产生10个整数的数组。 int * a;会指向一个整数。

指针不是简单类型的好习惯,因为它们消耗更多内存。

要获得更多答案,请检查:http://www.cplusplus.com/doc/tutorial/arrays/http://www.cplusplus.com/doc/tutorial/pointers/

相关问题