一维数组传参的本质

简介: 一维数组传参的本质

一:引入:

如果在函数内部计算一维数组的大小,得到的结果是什么?


`在这里插#include <stdio.h>

void test(int* arr)//参数写成指针形式

{

int sz2 = sizeof(arr) / sizeof(arr[0]);

printf(“sz=%d\n”, sz2);

}

int main()

{

int arr[] = { 1,2,3,4,5,6,7,8,9,10 };

int sz1 = sizeof(arr) / sizeof(arr[0]);

printf(“sz1=%d\n”, sz1);

test(arr);

return 0;

}入代码片`


为什么会出现上面结果的差异呢?

二:一维数组传参的本质

本质上数组传参传递的是数组首元素的地址。

函数内部sizeof(arr)计算的是一个地址的大小,而不是数组的大小,正因为函数的参数部分本质是指针,所以在函数内部是无法求出数组的大小。

#include <stdio.h>
void test(int arr[])//形参写成数组形式,本质上还是数组
{
  printf("%d\n", sizeof(arr));
}
//void test(int* arr)//形参写成指针形式
//{
//  printf("%d\n", sizeof(arr));//计算一个指针变量的大小
//}
int main()
{
  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  test(arr);
  return 0;
}


三:总结

一维数组传参的本质是:数组首元素的地址。

如果想要计算数组元素的个应该在main函数内部计算。

#include <stdio.h>
void test(int* p,int sz)
{
  int i = 0;
  for (i = 0; i < sz; i++)
  {
    printf("%d ", *(p + i));
  }
}
int main()
{
  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  test(arr,sz);
  return 0;
}


目录
相关文章
|
网络安全 虚拟化
zookeeper集群不能通讯
zookeeper集群不能通讯
302 0
|
前端开发
Grafana汉化笔记
Grafana汉化笔记 tags:网站 @[toc] 前言 本文主要记录Grafana汉化过程,以备后续查阅。Grafana中文版本基于官方源码(前端部分)进行汉化。汉化内容主要为前端UI界面文本,不涉及后端服务器内容。
6826 1
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
255438 0
|
机器学习/深度学习 人工智能 算法
软件测试中的人工智能:现状与未来
本文探讨了人工智能在软件测试中的应用,包括自动化测试、缺陷预测、测试用例生成等方面。通过分析当前AI技术的优势和不足,提出了未来可能的发展方向,为软件测试领域提供了新的思路和方法。
514 4
|
12月前
|
存储 算法 安全
SM2解密
【10月更文挑战第5天】SM2解密
599 11
|
Android开发 Kotlin
The Android Gradle plugin supports only Kotlin Gradle plugin version 1.3.10 and higher
The Android Gradle plugin supports only Kotlin Gradle plugin version 1.3.10 and higher
310 3
|
安全 网络虚拟化 数据安全/隐私保护
Windows 10系统自带VPN客户端配置连接PPTP VPN服务器
Windows 10系统自带VPN客户端配置连接PPTP VPN服务器
6173 1
|
数据管理 数据处理 数据库
分享一个导出数据到 Excel 的解决方案
分享一个导出数据到 Excel 的解决方案
252 0
|
开发框架 开发工具 Java
从零到高手:一文教你快速上手Vaadin,打造首个炫酷Web应用,开启编程新世界的大门
【8月更文挑战第31天】Vaadin是一款基于Java的Web应用开发框架,以其丰富的组件库、简洁的API及对现代Web标准的支持而广受开发者欢迎。本文将指导你从零开始快速搭建一个简单的Vaadin应用。首先确保已安装JDK 11及以上版本和IDE(如IntelliJ IDEA或Eclipse)。接着使用Spring Initializr创建新项目,并选中“Spring Web”和“Vaadin”依赖。创建项目后,编写主应用类和主页类,实现基本页面功能。最后配置启动页面并运行应用。通过这些步骤,你将成功搭建一个基础Vaadin应用,开启探索更多特性的旅程。
1633 0
|
XML JSON 前端开发
WebSocket是什么
【4月更文挑战第27天】WebSocket,即Web浏览器与Web服务器之间全双工通信标准。