*a和a[]有什么区别?

#include <stdio.h>
#define N 9
/**********found**********/
void fun(int *a, int n)
{ int i, j, max, min, px, pn, t;
/**********found**********/
for (i=0; i<n-1; i+=2)
{ max = min = a[i];
px = pn = i;
/**********found**********/
for (j=i+1; j<n; j++)
{ if (max < a[j])
{ max = a[j]; px = j; }
if (min > a[j])
{ min = a[j]; pn = j; }
}
if (px != i)
{ t = a[i]; a[i] = max; a[px] = t;
if (pn == i) pn= px;
}
if (pn != i+1)
{ t = a[i+1]; a[i+1] = min; a[pn] = t; }
}
}
main()
{ int b[N]={1,4,2,3,9,6,5,8,7}, i;
printf("\nThe original data :\n");
for (i=0; i<N; i++) printf("%4d ", b[i]);
printf("\n");
fun(b, N);
printf("\nThe data after moving :\n");
for (i=0; i<N; i++) printf("%4d ", b[i]);
printf("\n");
}
为什么这里int *a ?inta[]为什么不行?

第1个回答  2013-02-21
int *a是定义一个指针在调用时指向数组b[]首地址,即整个数组b,这样就可以把整个数组b进行排序,a[]只表示数组中的某一个,并不能表示整个数组,可以把 *a 改成 &a,这样也可以表示整个数组了。
第2个回答  2013-02-20
*a是指针,a[]是数组;作形式参数时,*a传递主函数中b[]中的数值
第3个回答  2015-10-06
如果单纯int *a和int a[]的区别的话,int *a为指向一个整形的指针。而int a[]为一个整形数组,而数组名为其第一个元素的首地址,他们一个是形参,一个是实参,形参指向实参的地址,上面的程序错了,和这两个参数没关系,将Fun含数的第二行改为for (i=0; i<n-1; i+=1)即可实现从大到小的排序。
1.
声明的时候不同
int *a; //没有给a分配地址 野指针
int a[5]; //a已经是数组的首地址了
2.
指针是变量 数组名是常量
int a[5];
int *p=a;

你是可以p+1,a+1 而且他们等效 ,
其他都一样, 本质就是储存地址 根据其类型算出偏移量进行偏移( 也就是p+几 )
第4个回答  2013-02-21
1.
声明的时候不同
int *a; //没有给a分配地址 野指针
int a[5]; //a已经是数组的首地址了
2.
指针是变量 数组名是常量
int a[5];

int *p=a;
你是可以p+1,a+1 而且他们等效 ,
但是 你p++可以 而a++肯定报错 因为数组名是常量 不能更改!

其他都一样啦 本质就是储存地址 根据其类型算出偏移量进行偏移( 也就是p+几 )
另 楼上代码中函数参数中int *a 可以改为int a[] 不会出错
我还特意试了 通过了

经验之谈 手工打造 望楼主采纳本回答被提问者和网友采纳