*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[]为什么不行?

*a和a[]有什么区别:char a[]定义的是一个数组,char *a定义的是一个指针。

1.char a[]="asdf",这时候数组a是存放在函数的堆栈中的,函数推出时这个堆栈就被清除了。

2.char *a="asdf","asdf"是一个常量,不存放在堆栈中,而是放在一个特殊的段当中。

3.可以用printf("0X%x\t0X%x\n",name,a);看下。定义成数组时这两个地址很靠近的,但是定义成指针就不是了。

如果单纯int *a和int a[]的区别的话,int *a为指向一个整形的指针。而int a[]为一个整形数组,而数组名为其第一个元素的首地址,他们一个是形参,一个是实参,形参指向实参的地址,上面的程序错了,和这两个参数没关系,将Fun含数的第二行改为for (i=0; i<n-1; i+=1)即可实现从大到小的排序。

扩展资料:

C语言的优点如下:

1、简洁紧凑、灵活方便

C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 

2、运算符丰富

C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。 

3、数据类型丰富

C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。

4、表达方式灵活实用

C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,其程序设计更主动、灵活。它语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据可以通用等。 

5、允许直接访问物理地址,对硬件进行操作

由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位(bit)、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。

6、生成目标代码质量高,程序执行效率高

C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编程序生成的目标代码效率低10%~20%。

7、可移植性好

C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。 

8、表达力强

C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,用来实现各种数据结构的运算。C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。

C语言能直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。

参考资料:百度百科——C语言

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-07-09

区别是:

char a[]定义的是一个数组,char *a定义的是一个指针。

1.char a[]="asdf",这时候数组a是存放在函数的堆栈中的,函数推出时这个堆栈就被清除了。

2.char *a="asdf","asdf"是一个常量,不存放在堆栈中,而是放在一个特殊的段当中。

3.可以用printf("0X%x\t0X%x\n",name,a);看下。定义成数组时这两个地址很靠近的,但是定义成指针就不是了。

拓展资料:

C语言是一门通用计算机编程语言,广泛应用于底层开发。

C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

本回答被网友采纳
第2个回答  2013-02-21
如果单纯int *a和int a[]的区别的话,int *a为指向一个整形的指针。而int a[]为一个整形数组,而数组名为其第一个元素的首地址,他们一个是形参,一个是实参,形参指向实参的地址,上面的程序错了,和这两个参数没关系,将Fun含数的第二行改为for (i=0; i<n-1; i+=1)即可实现从大到小的排序,本人在VC++中编译通过。
第3个回答  2013-02-21
做形参时意义相同,数组会退化为指针,楼主你不会是在int与a之间少打了一个空格吧。
第4个回答  2013-02-20
inta[] 如果不作为参数的话,方括号里面必须是一个常量表达式,不能为空。如果作为参数,那么传递的参数(数组)的成员个数将决定这个形参的长度,所以方括号里面可以不填。而int*a如果不作为参数的话,要指向一个具体的对象,否则毫无意义。而作为参数时,传递的是数组的首地址,所以a[i]等价于*(a+i)