欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

为什么在 C 语言中,数组和指针作为函数的形式引用可以互换?

最编程 2024-03-22 16:00:10
...

一、问题

以下两种定义形参的⽅法为什么是相同的?

void test(int a[])
{
    
}
void test(int *a)
{
    
}

 二、解答

先给出⼀个主函数,⽤于调⽤上⾯的⼦函数:

main()
{
    int a[10];
    test(a);
    ...
}

        调⽤语句中的 test(a),由于a 是数组名,所以形参要定义成第⼀种形式 int a[ ],但也可以认为调⽤语句中 test(a),a是数组⾸地址,即a是 a[0]的地址,即&a[0],这样形参就应该是第⼆种形式指针 int *a,不论主调函数的实参如何理解,它的形式是⼀样的,因此,两种形参的意义是⼀样的。

三、总结

        其实,C语⾔形参中的数组名实质上就是指针变量。不论其定义形式如何,它与函数内定义的数组名是不同的。

即:

test(int a[10])

{
    int b[10];
}

其中的 int a[0]等价于 int *a;可以进⾏指针的各种运算,包括赋值运算。但 int b[10]就是数组名。

推荐阅读