C语言指针指向数组首地址写法疑问

int a,b,c; 等同于int a; int b; int c;
那int a[10],*p=a;这样写就对,,,int a[10];int *p=a;为什么这样就错了,,
main()
{
int a[5]={1,2,3,4,5};
int *p;
int *x;
int i;
int *p=a;\\改成p=a就不会报错
x=p+2;
for(i=0;i<3;i++)
{
printf("%d,%d\n",*x,*p++);
}
}
就提示[Error] error: redeclaration of `int*p'
现在疑惑的是 int *p等于p么??

不会有问题。“int a,b,c; 等同于int a; int b; int c;”正确。
“int a[10],*p=a;等同于int a[10];int *p=a;”也正确。可能是你int a[10]后面的那个分号是汉字分号造成的吧?追问

main()
{
int a[5]={1,2,3,4,5};
int *p;
int *x;
int i;
int *p=a;\\改成p=a就不会报错
x=p+2;
for(i=0;i<3;i++)
{
printf("%d,%d\n",*x,*p++);
}
}
就提示[Error] error: redeclaration of `int*p'
现在疑惑的是 int *p等于p么?

追答

那报错是因为你重复定义了,因为前面已经有了int *p; ,再写int *p=a;不就重复p了?错误提示也说得很明白:重复声明int*p。把前一个int *p; 删除!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-29
a[10]是数组里的某一个数,当然可以用整型int来定义,而a是一个数组,它是一串的数字怎么可以用int来定义呢追问

唉,我的意思是 int a[10],*p=a;这样写其实就是p指向了数组a的首地址,也就是int a[10]; int *p;
p=a;的意思!可以简化成上面的写法,上面的写法是把分号简化的写法,直观上看写成这样却不对int a[10];int *p=a;

第2个回答  2013-10-29
redeclaration of `int*p'
是因为名为p的变量被定义了两次,改成p=a,其实就是为p赋值
int *p形式上是C的声明语句,而p是变量,
不清楚你为什么对二者作比较
第3个回答  2013-10-29
int a[10];
int *p=a;这样写是对的
----------------------------
int a[10];
int *p=&a[0];这样也是对的
上面两种写法都表示p指向数组a的首地址
---------------------------------------------------
int a[5][5];
int *p=a;这种写法就错了
int (*p)[5]=a;这就对了
第4个回答  2013-10-29
理论上应该是对的,而且我的编译器也是对的。不知道你的什么回事。。。。
int a[10],*p=a;和int a[10];int *p=a;没区别。追问

我在下面追问了。

追答

你重复定义p了;
int型的指针p有两种写法: int *p; int* p;
你看第二种就会很明白,p是个指针,类型是int*。
第一种写法只是为了在定义如:int *p,a;时让你自己清楚p是指针int*型,a是int型

相似回答