C语言中的数组与指针

来源:互联网 发布:idea java文件 蓝色j 编辑:程序博客网 时间:2024/05/18 18:52

在C语言中,有时候在写函数的时候,形式参数,有的是数组形式,有的是指针类型

其实编译器把数组的形式参数当作了指针类型

指针实参                                                                                                   

fun1(int *ptr)

{

ptr[1] = 3 ;

*ptr = 3 ;

ptr = array2 ;


}


  数组实参      

fun2(int arr[])

{

*arr =3 ; 

array[1] = 3;

arr = array2;

}



 非实参的指针

int array[100],array2[100];

main()

{

*array = 3;

array = array2;   /*失败*/

}




语句array = array2; 引起了一个编译错误,错误的信息是 "无法修改数组名".但是arr= array2是合法的,因为arr虽然声明为数组但实际却是指针.

数组和指针课交换性地几点

1,用a[i] 这样的形式对数组进行访问总是被编译器"改写"或解释为像*(a+1)这样的指针访问

2,指针始终就是指针,而且你不可以改写成数组.你可以用下表形式访问,一般都是指针作为函数参数时,而且你知道实际穿的给函数的事一个数组

3,在特定的上写文中,也就是他作为函数的参数,一个数组的声明可以看做是一个指针.作为函数参数的数组(就是在一个函数调用中)始终会被编译器修改成为指向数组第一个元素的指针

4,因此,当吧一个数组定义为函数参数时,可以选择会把他定义为数组,也可以定义指针,不管选着那种方法,在函数内部事实上获得都是指针

5,在其他情况中,定义和声明必须匹配,如果定义了一个数组,在其他文件对他进行声明时必须把它声明为数组,指针也是如此.