@[TOC](数组传参和指针传参)

文章详细阐述了C语言中数组和指针作为参数传递的不同方式,包括一维数组的数组传参和指针传参,二维数组的传递,以及一级指针和二级指针的使用场景。通过示例代码解析了各种传参形式的实质和差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 指针数组和数组指针

int arr[5];
//arr是一个整型数组,每个元素是int类型的,有5个元素

int* parr1[10];
//parr1是一个数组,数组10个元素,每个元素的类型int*
    

int(*parr2)[10];
//parr2是一个指向数组的指针,指向的数组有十个元素,每个元素的类型是int

int(*parr3[10])[5];
//parr3是一个数组,数组有10个元素,每个元素的类型是:int(*)[5]
//parr3是存放数组 指针的数组

2.数组参数、指针参数

  把数组或者指针传给函数时,函数参数的设计。

2.1一维数组数组传参

例1:

//注意:数组名在传参的时候传的是数组首元素的地址,有两个例外
//形参写成数组的形式:
void test(int arr[10]) 
{

}

void test(int arr[])//形参部分的数组大小可以省略
{

}

void test(int arr[100])//不建议,但是没错
{

}

//形参写成指针的形式:
void test(int*p)
{

}
//以上形式都可以传参
int main()
{
	int arr[10] = { 0 };
	test(arr);
	return 0;
}

2.2一维数组指针的传参

//数组指针的传参:
void test2(int* arr[20])
{

}

void test2(int* arr[])
{

}

void test2(int** p)
{

}
//以上写法都是可以的
int main()
{
	int* arr2[10] = { 0 };
	test2(arr2);
	return 0;
}

在这里插入图片描述

2.3二维数组(传参)

在这里插入图片描述

void test(int arr[3][5])
{

}

void test(int arr[][5])//行可以省略,但是列不能省略
{

}

void test(int(*p)[5])  //形参写成指针的形式,5表示指向的数组是5个元素,P+1可以跳过一行,来到第二行的首元素地址
{

}

void test2(int(*p)[3][5])
{

}
int main()
{
	int arr[3][5] = { 0 };
	test(arr);//传的是第一行的地址
	test2(&arr);//传的是整个二维数组的地址
	return 0;
}

在这里插入图片描述

2.4一级指针的传参

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

2.5二级指针的传参

void test(char** ppc)
{

}
int main()
{
	char a = 'w';
	char* pa = &a;
	char** ppa = &pa;//ppa就是一个二级指针

	char* arr[4];//指针数组,每个元素是char*类型
	test(arr);
	test(ppa);
	return 0;
}
### 如何在MATLAB .m 文件中使用 `tic` `toc` 函数进行计时 为了精确测量一段代码的执行时间,在 MATLAB 中可以利用内置的 `tic` `toc` 函数。这两个函数成对出现,其中 `tic` 启动计时器,而 `toc` 停止计时器并报告经过的时间[^1]。 下面是一个简单的例子展示如何在一个 `.m` 文件里应用这些功能: ```matlab function measureElapsedTime() % MEASUREELAPSEDTIME Measures the elapsed time of a specific operation. clc; % 清除命令窗口的内容以便更清晰地查看输出结果 fprintf('Starting timing...\n'); tic; d = zeros(1, 10000); for i = 1:10000 d(i) = i; end elapsedTime = toc; fprintf(['Finished execution.\nThe loop took %.2f seconds to complete.\n'], ... elapsedTime); end ``` 这段脚本定义了一个名为 `measureElapsedTime` 的函数,当此函数被执行时,它会先清除屏幕上的任何先前输出,接着启动定时器(`tic`),之后创建一个包含一万项递增数值的数组,最后通过调用 `toc` 来停止计时并向用户反馈整个过程花费了多少秒数[^4]。 值得注意的是,每次调用 `toc` 都应当对应一次之前的 `tic` 调用;否则,如果没有匹配的 `tic` 就调用了 `toc`,那么将会返回自上一次 `tic` 计时开始至今的时间长度而不是抛出错误[^2]。 此外,除了 `tic/toc` 外还有其他几种方式可以在 MATLAB 中度量性能,比如 `cputime` 可以用来获得 CPU 时间而非实际流逝的时间,这对于评估算法效率特别有用[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值