c语言数组怎么赋值给另一个数组(C不传递数组长度)

如果只传递数组,不数组长度,如何利用函数来处理数组?,今天小编就来说说关于c语言数组怎么赋值给另一个数组?下面更多详细答案一起来看看吧!

c语言数组怎么赋值给另一个数组(C不传递数组长度)

c语言数组怎么赋值给另一个数组

如果只传递数组,不数组长度,如何利用函数来处理数组?

#include <iostream> int sum(int arr[]); // how to implement main() { int arr[5] = {1,2,3,4,5}; std::cout<<sum(arr); getchar(); } int sum(int arr[]) { // return 0; }

一点前置知识:

对于一维数组:

int arr[5] = {1,2,3,4,5}; // 指向数组首元素的指针: int *ape = arr; // arr退化为指向数组首元素的指针 // 指向数组整体的指针: int (*ap)[5] = &arr;

对于二维数组:

int arr[3] [4]= {1,2,3,4,5,6,7,8,9,10,11,12}; // 指向数组首元素的指针: int (*ape)[4] = arr; // arr退化为指向数组首元素的指针 // 指向数组整体的指针: int (*ap)[3][4] = &arr;

很明显,对于指向数组首元素的指针和指向数组整体的指针,指针的目标类型是不同的。

对于指向数组首元素的指针,其数组元素的类型相对于数组类型来说,丧失了第一维的长度信息。

对于指向整体数组的指针而言,保留了第一维的长度信息。

不同类型的指针,当指针偏移(指针加减一个整型值)时,其偏移的字节数不同。

对于指向数组首元素的指针ape,ape 1表示偏移sizeof(int)*4*1个字节;

对于指向数组整体的指针ap,ap 1表示偏移sizeof(int*3*4*1个字节。

如果指定数组长度,代码很简单:

#include <iostream> int sum(int arr[],int size); // 指向数组首元素的指针 元素长度 main() { int arr[5] = {1,2,3,4,5}; std::cout<<sum(arr,5); getchar(); } int sum(int arr[],int size) { int s=0; for(int i=0;i<size;i ) s = arr[i]; return s; }

如何显式指定数组长度,并传递指向数组整体的指针,代码也很简单:

#include <iostream> int sum(int (*arr)[5]); // 指向数组首元素的指针 元素长度 main() { int arr[5] = {1,2,3,4,5}; std::cout<<sum(&arr); getchar(); } int sum(int (*arr)[5]) { int s=0; for(int i=0;i<5;i ) s = (*arr)[i]; return s; }

可惜的是,这个函数只能处理数组长度为5的数组。

如何支持不同长度数组?

我们知道,模板在编译阶段展开,所以可以传递一个常量模板参数:

#include <iostream> template<const int size> int sum(int (*arr)[size]); // 指向数组首元素的指针 元素长度 int main() { int arr[5] = {1,2,3,4,5}; std::cout<<sum(&arr); return 0; } template<const int size> int sum(int (*arr)[size]) { int s=0; for(int i=0;i<size;i ) s = (*arr)[i]; return s; }

使用引用更简洁:

#include <iostream> template<const int size> int sum(int (&arr)[size]); // 指向数组首元素的指针 元素长度 main() { int arr[5] = {1,2,3,4,5}; std::cout<<sum(arr); getchar(); } template<const int size> int sum(int (&arr)[size]) { int s=0; for(int i=0;i<size;i ) s = arr[i]; return s; }

for循环使用range for更简洁:

#include <iostream> template<const int size> int sum(int (&arr)[size]); // 指向数组首元素的指针 元素长度 main() { int arr[5] = {1,2,3,4,5}; std::cout<<sum(arr); getchar(); } template<const int size> int sum(int (&arr)[size]) { int s=0; for(int i:arr) s = arr[i]; return s; }

-End-

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页