我想检查(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;
}
答案 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/。