首页 置换 选车 估价 问答 生活 经销商 车管所 汽车资讯 汽车销量 车牌查询 今日油价 天气预报
您的位置: 首页 > 生活 > 其他 > c语言数组怎么赋值给另一个数组(C不传递数组长度)
c语言数组怎么赋值给另一个数组(C不传递数组长度)
更新时间:2024-07-08 08:45:28

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

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

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-

,
相关推荐RECOMMEND
退休年龄按照身份证还是档案(我退休出了啥状况)
大家都知道,退休时间,是以达到法定退休年龄的那一月为准。时间一到,你的退休文件就下来了。那退休时间如何确定?户口?还是身份证?都不是!是以个人档案首份履历表中的出生日期为准。网络图说一说我的退休时间为...
衣柜味道很重说明甲醛很浓吗(衣柜一开门味道大是甲醛味吗)
众所周知,甲醛是一种对人体健康危害极大的有毒气体,它虽然无色但是有强烈的刺激气味儿,如果说所在的环境中甲醛浓度特别高,那么我们是可以感受到明显的刺激,它的气味儿就像福尔马林那般特别刺鼻。对此,有网友问...
从哪查工伤保险失业保险(如何查询自己的养老)
,
vr ar mr的区别和联系(什么是VRARMR呢)
VR、AR、MR这些到底什么呢?它们之间有什么区别呢?我该如何选购呢?今天小编给各位客官老爷科普下什么VR,什么是AR,什么是MR。虚拟现实VirtualReality英语缩写(VR)。图片来源与网络...
苹果xr 怎么换电池保留原电芯(iPhonexr原保护板更换3500高容电芯教程)
友情提示:非专业选手不要自己搞。重点注意个问题1:关机后断电,不要用手去摸面容旁边的点阵,摸了后点阵会熔断,造成面容不能用。2:拆卸电池不要硬拉,面容排线和音量排线容易拉断3:改装完毕,一定要注意绝缘...
冷色调和暖色调有什么差别(你是喜欢暖色调还是冷色调)
每个人在装修最困惑的是如何选择颜色,怎样搭配才视觉效果达到最好,让自己的家看起来舒服。纯冷色调和纯暖色调是许多人喜欢的风格。接下来我们来看一下你是喜欢的什么色调。暖色调装修效果暖色调在色彩上比较温馨,...