[指针三]数组作为参数传递

本文详细解释了数组名在参数传递中的应用,通过两个示例演示如何使用数组名作为参数来访问数组元素,深入理解数组操作与函数调用之间的联系。

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

数组名相当于数组的首地址,通过数组名作为参数传递

Demo1:

#include <stdio.h>

void fun(int arr[2])
{
	printf("arr[0] = %d,arr[1] = %d",arr[0],arr[1]);
}
void main()
{
	int arr_1[2] = {1,2};
	fun(arr_1);
	printf("\n");
	return ;
}


Demo2:

#include <stdio.h>
void fun(int *arr)
{
	printf("arr[0] = %d,arr[1] = %d",arr[0],arr[1]);
}
void main()
{
	int arr_1[2] = {1,2};
	fun(arr_1);
	printf("\n");
	return ;
}



在 C 语言中,数组作为参数传递给函数时,其行为与指针密切相关。以下是几种常见的数组传递方式及其特点: ### 1. 使用数组名作为函数参数 数组名在作为函数参数传递时,会被视为指向数组首元素的指针。这意味着函数接收到的是数组的地址,而不是数组的副本。因此,函数可以直接操作原始数组的数据。例如: ```c void fn1(int arr[]); void fn2(int *arr); ``` 这两种声明方式在函数定义中是等价的,都可以用来接收数组的地址[^1]。 ### 2. 使用指针作为函数参数 由于数组名在传递时自动转换为指针,因此也可以直接使用指针作为函数参数。这种方式更加明确地表明了函数接收的是一个地址。例如: ```c void fn2(int *arr); ``` 在函数内部,可以通过指针访问和修改数组元素,这些修改将直接影响到原始数组,因为函数和调用者共享同一块内存区域[^2]。 ### 3. 指定数组大小的形参 虽然可以在函数形参中指定数组的大小,如 `int a[3]`,但实际上这个大小并不会对编译器产生任何约束作用。传递一个大小为 2 的数组时,编译器不会报错,因此这种方式并不能保证数组越界的安全性。通常需要额外传递数组的长度来确保安全访问。例如: ```c void test(int datas[3], int length); ``` 在这种情况下,`3` 并不会对实际传递的数组长度产生影响,因此建议通过额外的参数传递数组的长度[^3]。 ### 示例代码 以下是一个完整的示例,展示了如何将数组传递给函数并对其进行操作: ```c #include <stdio.h> void printArray(int *arr, int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); printArray(arr, size); // 传递数组名和数组大小 return 0; } ``` 在这个示例中,`printArray` 函数接收一个指针 `arr` 和数组的大小 `size`,然后打印数组中的所有元素。由于传递的是数组的地址,因此函数可以直接访问和修改数组的内容。 ### 总结 - 数组名作为函数参数时,会被视为指向数组首元素的指针。 - 函数可以通过指针直接操作原始数组的数据。 - 虽然可以在形参中指定数组大小,但这并不具有实际约束作用,建议通过额外参数传递数组长度以确保安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值