数组参数传递后,子函数能计算长度吗?

【TM1650】STM8S TM1650芯片控制程序 以下为.h文件: #ifndef __TM1650_I2C_H #define __TM1650_I2C_H #include "stm8s.h" #include "stm8s_gpio.h" #include "tim1.h" #include "usart2.h" #include <iostm8s103f3.h> #include <intrinsics.... 阅读详情

问题:
1. 传递数组时,无法在子函数中计算数组长度?
2. 在主函数中求长度和在子函数中求长度的结果不一样。
**

例子:

#include <stdio.h>
typedef struct struct_LH
{
        int a;
        double b;
}LH;
void func(LH x[],int *pn)
{
        *pn=sizeof(x)/sizeof(x[0]);
        printf("fun len=%d\n",*pn);
}

int main()
{
        LH arr[20];
        int n;
        func(arr,&n);
        printf("main len= %d\n",sizeof(arr)/sizeof(arr[0]));
        return 0;
}

结果:fun arr len=0
main arr len= 20
原因:
参数的传递是把实参的值或副本或地址传递给形参,但数组较例外,数组传递时只会传递数组的首地址,参数到了函数内就成了普通指针,函数在后面需要用到数组元素时再根据首地址和下标去找,因而这就导致了刚开始的错误。

解决方法:
只能先计算好长度后再传过去,进行其他的运算。

#include <stdio.h>
typedef struct struct_LH
{
        int a;
        double b;
}LH;
void func(LH x[],int pn)
{
        printf("fun len=%d\n",pn);
}

int main()
{
        LH arr[20];
        int n;
        func(arr,20);
        printf("main len= %d\n",sizeof(arr)/sizeof(arr[0]));
        return 0;
}在这里插入代码片
链路聚合Eth-trunk以及华为交换机配置实例 链路聚合简介 以太网链路聚合Eth-Trunk简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。 目的: 随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出越来越高的要求。在传统技术中,常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够灵活。 采用链路聚合技术可以在不进行硬件升级的条件下,通过将多个物理接口捆绑为一个逻辑接口 阅读详情

相关推荐

Spring Boot 3.5.4 + LangChain4j实战:用Milvus搭建企业级RAG问答系统(附阿里百炼API配置)

本文详细介绍了如何利用Spring Boot 3.5.4、LangChain4j与Milvus构建企业级RAG问答系统。内容涵盖从架构设计、阿里百炼API安全配置、Milvus部署优化,到RAG检索、会话管理等核心实现,并提供了生产级API设计、监控集成及性能优化等实战经验,旨在帮助开发者打造高可用、可维护的Java AI应用。

weixin_29054399的博客 610

c语言求数组的长度

1.在c语言中求数组的长度可用以下方法:char data[1024]; int length = sizeof(data)/sizeof(data[0]); printf("length=%d\n",length);即可求出数组长度为10242.但是,如果是通过传递数组名参数到子函数中,上边的方法获取数组长度是不可行的例如:int myarrlen(char *data) {      int ...

小明的专栏 3万+

3D坐标系转换实战:如何用Python快速实现旋转矩阵与平移向量的组合变换

本文详细介绍了如何使用Python和NumPy实现3D坐标系转换中的旋转矩阵与平移向量的组合变换。通过齐次坐标和变换矩阵的数学原理,结合代码示例,帮助开发者高效处理机器人路径规划和计算机视觉中的空间变换问题,并解决实际应用中的常见错误。

pluto的博客 960

c语言函数 参数数组的长度,函数参数中的数组长度

杨魅力sizeof只有在将数组应用于原始数组时,才能找到数组的长度。inta[5];//realarray.NOTapointersizeof(a);//:)但是,当数组衰变为指针时,大小将给出指针的大小,而不是数组的大小。inta[5];int*p=a;sizeof(p);//:(正如您已经很清楚地指出的那样,main作为参数接收数组的长度(ARGC)。是的,这是出...

weixin_39608657的博客 866

Shader Graph实战:5分钟搞定Flow Map水体流动效果(含UV偏移避坑指南)

本文详细解析了如何使用Unity的Shader Graph工具快速实现Flow Map水体流动效果,涵盖基础原理、核心节点搭建、高级技巧及性能优化。特别针对UV偏移问题提供避坑指南,帮助开发者轻松打造专业级动态水面效果,适合游戏场景增强视觉表现。

weixin_29250403的博客 246

STM32+EC800M-CN 4G模块数据透传踩坑实录:从AT指令调试到花生壳内网穿透

本文详细介绍了STM32与移远EC800M-CN 4G模块的数据透传实现过程,包括硬件连接、AT指令调试、TCP连接建立以及花生壳内网穿透配置。通过实战案例和代码示例,帮助开发者快速解决4G通信模块在物联网应用中的常见问题,提升数据传输稳定性。

weixin_42715608的博客 322

求传入函数中的数组长度

 摘自:http://blog.chinaunix.net/u2/75321/showart_1161698.html 一般来说数组传入函数里面后会退化为指针,sizeof则没有用了,所以一般都要多传入一个数组长度。但是还是有办法求长度的。下面三个方法的原理都是利用array-size函数把数组的长度骗取出来,而且利用&号过滤指针.template struct siz

SearchLife的专栏 1822

物联网组网技术优缺点对比:蓝牙、LoRa、wifi、NB-IoT、ZigBee等

1.前言 最近对物联网产品自组网技术选型,找到合适的组网技术,让产品自行组网并完成数据的传输。 2.参数对比

谁念西风独自凉 4万+

C语言获得数组长度的函数

1、c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数)。 例如: int data[4]; int length; length=sizeof(data)/sizeof(data[0]);  //数组占内存总空间,除以单个元素占内存空间大小 printf("length of data[4]=%d", length ); //输出length of data[4]=

3万+

基于STM32+RFID设计的宿舍检修管理系统

设计一个上位机,用来管理查看维修检修信息,当维修寝室的设备或者检修完成时,通过STM32上的RC522刷一下这个寝室的IC卡,识别这是哪个寝室,识别成功后在软件上弹出一个对话框,填写本次维修或者检修的事件,填写完毕点击提交即可。...

2556

汽车行业新能源汽车数据爬虫:抓取新能源汽车数据,分析市场发展和技术创新

在汽车行业,新能源汽车市场的发展和技术创新是当前的热点话题。通过抓取新能源汽车的数据,我们可以深入了解市场趋势、消费者需求以及技术创新的方向。本文将详细介绍如何使用 Python 爬虫技术抓取新能源汽车数据,并对数据进行分析和可视化展示。

u014481728的博客 1144

c++计算数组长度/数组作为参数传递

c++计算数组长度/数组作为参数传递 (1)借助sizeof()函数 : #include<stdio.h>int main(){ // 定义一个整型数组, 并进行初始化赋值9个数据 :  int arr[] = {1,2,3,4,5,6,7,8,9}; int length = 0; // 计算数组中数据长度 : // 所有数据的字节数除以一个数据的字节数即为数据的个数 :  length = sizeof(arr) / size

小惊大怪的博客 2331

中文核心:swin transformer 农作物病虫害识别 完整代码数据

中文核心:swin transformer 农作物病虫害识别

940

数组名作为参数传递给函数

C语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数),例如 sizoef(arr)/sizeof(arr[0]) ,即数组占用总字节/类型的字节数。如: int main(){ int arr[] = {1,2,3,4,5,6}; printf("main()得出的数组长度为-> %d",sizeof(arr)/sizeof(arr[0])); } ...

江冷易水寒 6014

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

计算数组长度引发的一些问题

今天一个朋友问了我他的程序怎么输出的结果不对,对于一个简单的求数组长度的小问题竟然发现还有那么多门道,程序如下: void merge(int *A, int p, int q, int r) { int n1 = q-p+1; int n2 = r-q; int* L = new int(n1+1); int* R = new int(n2+1); for(int i=0; i<n1

算法改变人生 641

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++的一个问题点,数组作为参数传递到函数之后,不能直接求出长度

YU 原数组, 传递参数之后 结果是作为参数传进去之后是作为指针,是不能求出长度的,所以需要把长度提前求出作为参数传入该函数。 反思:最近C++,Python,java轮流用,使得一些用法和特性容易弄混,遇到问题还是以实践为主,然后去翻阅资料,最后及时总结特性。 ...

m0_51174684的博客 1958

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

sizeof()与strlen()

sizeof()可以计算所有类型,strlen()仅计算字符串。 sizeof计算对象所占内存字节数,strlen()计算字符个数,遇到'\0'截止。 char *a; char b[5]; sizeof(a) = 8 ; // 64位系统,8代表的是指针的大小,指针占8字节 sizeof(b) = 5 ; // 计算字符串数组的结果是真实的字符数组大小 //strlen(a) strlen(b) // 无固定值,因为strlen判断的唯一标准是'\0', //它会根据a...

qq_41687938的博客 383

数组传参 求数组大小

原文 http://bbs.youkuaiyun.com/topics/390334718 首先要搞明白sizeof()不是一个函数而是一个运算符 然后要搞明白数组的首地址作为函数参数传入的时候就退化成指针 那么当你直接sizeof(数组首地址)的时候算出来的是这个数组的大小,而当你使用int_array_length(array)这个自定义函数的时 候arrayz在传入这个函数的时候已经退化成一个指针了,那...

mangshe0的专栏 572

关于如何在数组作为参数传递时在目标函数中获取数组长度的解决方法

我在定义自定义函数时,需要把主程序中的数组传递到自定义函数中使用,但是发现在自定义函数中无法获取这个数组的长度,在网上一查了解到如何数组作为参数传递时只能作为指针传递,没有数组长度那肯定不便于数组的操作.于是我想到了两个方法:1,这个方法我觉得太麻烦,所以也不想多说,就是用循环读取指针的值是否为NULL.这个想法只是理论上的,我想应该可以能实现,但是会写很多代码,所以我也就不实验了.2,第二种很简...

baldeagle110的博客 1289

计算数组的大小、数组的传参、数组的形参

#include <stdio.h> #include <stdlib.h> void arrayprint(int datas[],int ele) /重点2:1.形式参数中,写的数组是数组样子,但中括号中数组的大小是无效的 2.括号中无论写多少,都不能代表形参数组有多大! 3.中括号的作用仅仅用来表示该参数是一个地址(在windows啊哈C之类的软件编译器中,整型用四个字节表示地址;在Linux64位中用8个字节表示)/ { int i; printf(“数组的大小:%d\n”,

weixin_48859611的博客 694

C语言中数组长度的计算详解

1) C语言中计算数组长度大小 C语言字符串长度的计算可以使用strlen(str); 但是对于数组长度的大小却没有相关函数可以使用; C语言数组长度的大小可以使用: int main() { int arr[] = {1,2,3,4,5}; int length = sizeof(arr)/sizeof(int); printf("the length of arr is %d\n", length); } 2) 在函数调用中计算数组的长度 上述计算数组长度的方法在函数调用中不可使用,有bug;

qq_25626505的博客 4万+

C++中数组作为参数时,获取数组长度的方法

C++中数组作为参数时,获取数组长度的方法我们都知道,数组作为参数传递时,实际上传递的是一个指针,采用sizeof的方法,获取到的是指针的长度。 那么有没有方法获取到它的长度呢?有的,下面我来介绍一个方法:#include <iostream> using namespace std;template<class T> int length(T& data) { return sizeof

Helianthus_的博客 1万+

c++函数输入参数为数组时怎么求长度

如果你只想知道答案: 静态数组,如果在函数里定义一个静态数组A,则在此函数里可以通过sizeof(A)/sizeof(A[0])求数组长度。 如果数组A在函数外定义,并且作参数传入函数,怎么在函数里求其长度?——没法求,一般我们会再多传入一个参数记录长度 动态数组,(1)用new创建的动态数组作参数时,在函数里同样也不能求长度,因此一般我们也会再多传入一个参数记录长度。 (2)参数为vec...

qq_40692109的博客 8407

C语言取数组长度传参时的问题

通常我们取一个数组实际长度(个数,非字节数)时最常用的方法就是写一个宏函数,用字节数除去类型就可以得到实际长度 #define ArrSzie(arr) sizeof(arr)/sizeof(arr[0]) 如果当用这个宏函数去取参数会怎样? #include <stdio.h> #define ArrSize(arr) sizeof(arr)/sizeof(arr[0]) int arr[10] = {0}; void test(int* var){ print

17岁boy的博客 1162

关于将数组作为参数传递给函数的简单使用

简单的方式可以将数组作为一个全局变量,然后就可以在函数中使用了.另外的一种方式为:function1(int a[]) { cout<<a[0]<<endl; }int main() { int a[2] = {1,2}; function1(a); }参数传入的时候只需要传入数组名称即可.

xiaohongmao663832的博客 7325
上一篇: 【转载】C结构体字节对齐
下一篇: 动态内存分配原理------brk()和mmap()详解
灵魂打工人
博客等级 码龄9年 32粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值