快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

c语言函数形参数组是指针 形参数组本质上是指针变量

C语言函数里的参数是指针的问题

函数定义和函数调用是两个概念,函数定义 为f(int *arr),表示参数是一个整型指针,因此使用该函数时要传递一个地址,如变量int a=0; 调用函数f传递a的地址时需要写为f(a);而对于数组来说,如int b[]=[1,2,3], b本身就是数组首元素的地址,因此调用函数f传递数组首地址需要写为f(b)。

创新互联专注于企业全网整合营销推广、网站重做改版、滁州网站定制设计、自适应品牌网站建设、H5页面制作成都做商城网站、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为滁州等各大城市提供网站开发制作服务。

关于c语言 当实参是数组名 形参是指针变量时

在C语言,数组无论作为参数还是返回值,都是以指针形式返回或者传递的。在数组中,数组名字代表的是数组第1个元素的地址。比如如下数组。

int

a[10]

=

{1,2,3,4,5,6};

数组名a,实际上相当于a[0]。所以,当实参是数组名,形参是指针变量时,只要保证数据类型一致即可传递。如下面的示例代码:

#include stdio.h

void f(int *p, int size) {

for (int inx=0; inx!=size; ++inx) printf("%d\t",p[inx]);

printf("\n");

}

int main()

{

int a[4] = {1,2,3,4};

f(a,4);

return 0;

}

c语言函数的形参为指针变量时,对应的实参可以是数组名。怎么理解呀

举例:

void f(int *p)

{

}

int arr[]={1,2,3};

因为函数f的形参是一个类型为int的指针变量,所以调用f时,可以将数组名arr作为实参传给形参p。即可以这样调用:f(arr);

为什么C语言把数组形参当做指针?

解释:在C语言中,所有非数组形式的数据实参都以传值形式(对实参做一份拷贝并传递给调用的函数,函数不能修改作为实参实际变量的值,而只能修改传递给它的那份拷贝)调用。

然而,拷贝整个数组都无论是在时间还是存储空间上开销都是非常巨大的,在绝大部分时间你并非需要拷贝整个数组,你只想告诉函数在哪一时刻需要哪个特定数组,要达到这一目的,可以考虑的方法是在形参上增加一个存储说明符(storage specifier)表示它时传值调用还是传址调用。

函数的返回值“绝不能”是函数数组,而只能是指向数组或函数的指针。

有些人喜欢理解为:除数组和函数之外所有C语言参数在默认情况下都是传值调用,数组和函数都是传址调用。

这种理解有些片面,数据也可以使用传址调用,只要在它前面加上取址操作符()这样传递的是实参的地址而不是实参的拷贝。

因为编译器的机制非常清楚—在被调用的函数中,你只拥有一个指向变量的指针而不是变量本身。


本文标题:c语言函数形参数组是指针 形参数组本质上是指针变量
链接URL:http://6mz.cn/article/dojoese.html

其他资讯