数组名作为函数参数时会退化为指针
2015-03-16 21:54
127 查看
void arraySum(int a[],int b[])
{
cout < <"sizeof(a)" < <sizeof(a) < <endl;
cout < <"sizeof(a[0])" < <sizeof(int) < <endl;
int length_a = sizeof(a)/sizeof(int);
}
// 等价于:
void arraySum(int *a,int *b)
{
cout < <"sizeof(a)" < <sizeof(a) < <endl;
cout < <"sizeof(a[0])" < <sizeof(int) < <endl;
int length_a = sizeof(a)/sizeof(int);
}
最近在自己写一些小函数,有用到数组名作为参数的情况,在这里记录下学习过程。
一些知识: http://www.cnblogs.com/c-king/archive/2009/03/05/1404202.html
数组名作函数的参数,必须遵循以下原则:
(1)如果形参是数组形式,则实参必须是实际的数组名,如果实参是数组名,则形参可以是同样维数的数组名或指针。
(2)要在主调函数和被调函数中分别定义数组。
(3)实参数组和形参数组必须类型相同,形参数组可以不指明长度。
(4)在C语言中,数组名除作为变量的标识符之外,数组名还代表了该数组在内存中的起始地址,因此,当数组名作函数参数时,实参与形参之间不是"值传递",而是"地址传递",实参数组名将该数组的起始地址传递给形参数组,两个数组共享一段内存单元,编译系统不再为形参数组分配存储单元。
{
cout < <"sizeof(a)" < <sizeof(a) < <endl;
cout < <"sizeof(a[0])" < <sizeof(int) < <endl;
int length_a = sizeof(a)/sizeof(int);
}
// 等价于:
void arraySum(int *a,int *b)
{
cout < <"sizeof(a)" < <sizeof(a) < <endl;
cout < <"sizeof(a[0])" < <sizeof(int) < <endl;
int length_a = sizeof(a)/sizeof(int);
}
最近在自己写一些小函数,有用到数组名作为参数的情况,在这里记录下学习过程。
一些知识: http://www.cnblogs.com/c-king/archive/2009/03/05/1404202.html
数组名作函数的参数,必须遵循以下原则:
(1)如果形参是数组形式,则实参必须是实际的数组名,如果实参是数组名,则形参可以是同样维数的数组名或指针。
(2)要在主调函数和被调函数中分别定义数组。
(3)实参数组和形参数组必须类型相同,形参数组可以不指明长度。
(4)在C语言中,数组名除作为变量的标识符之外,数组名还代表了该数组在内存中的起始地址,因此,当数组名作函数参数时,实参与形参之间不是"值传递",而是"地址传递",实参数组名将该数组的起始地址传递给形参数组,两个数组共享一段内存单元,编译系统不再为形参数组分配存储单元。
相关文章推荐
- C语言中,数组名作为参数传递给函数时,退化为指针
- C语言中,数组名作为参数传递给函数时,退化为指针
- 当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针!
- 数组名作为函数参数,进入函数时退化成指针
- C语言中,数组名作为参数传递给函数时,退化为指针
- 数组名作为函数参数时,退化为指针
- C语言中,数组名作为参数传递给函数时,退化为指针
- 数组作为函数参数传递时退化为指针(腾讯)
- 以数组作为函数参数退化为指针
- 数组、指针作为函数参数
- 原来数组作为参数时候是可以退化成为指针的,我OUT了
- 排序热身及数组做函数参数退化为指针引申
- 数组作为函数参数 自动转换为同类型指针
- 利用数组名作为函数参数传递排序和用指针进行排序
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析 .
- 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为参数,泛型函数
- 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为参数,泛型函数
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 二十六、数组、指针和字符串:数组的存储与初始化、对象数组、数组作为函数参数
- 鸡啄米:C++编程入门系列之二十六(数组、指针和字符串:数组的存储与初始化、对象数组、数组作为函数参数)