乐闻世界logo
搜索文章和话题

Difference between passing array and array pointer into function in C

5 个月前提问
4 个月前修改
浏览次数43

1个答案

1

在C语言中,数组和数组指针传递到函数时的处理方式有一些关键的区别,这些区别影响着函数的设计和内存的使用。下面我将详细解释这两种方式,并且提供相应的代码示例。

1. 数组传递到函数

当一个数组作为参数传递到函数时,我们通常传递的是数组的首地址。在函数形参中,这通常表现为数组的形式或者指针形式。需要注意的是,虽然数组的名字代表了数组首元素的地址,但函数内部无法直接得知原始数组的大小(长度),除非额外传递数组的长度。

代码示例:

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 myArray[] = {1, 2, 3, 4, 5}; int n = sizeof(myArray) / sizeof(myArray[0]); printArray(myArray, n); return 0; }

在这个例子中,myArray 被传递到 printArray 函数中,实际上传递的是数组的首地址。函数通过形参 int arr[] 接收数组地址,通过 size 参数知道数组的长度。

2. 数组指针传递到函数

数组指针是指向数组的指针,它可以存储数组的地址,并且可以通过递增指针来访问数组中的后续元素。当数组指针传递到函数中时,你可以在函数内部操作原数组,这在处理动态多维数组时特别有用。

代码示例:

c
#include <stdio.h> void modifyArray(int (*pArr)[5], int size) { for (int i = 0; i < size; i++) { (*pArr)[i] += 5; // 给每个元素加5 } } int main() { int myArray[5] = {1, 2, 3, 4, 5}; modifyArray(&myArray, 5); for (int i = 0; i < 5; i++) { printf("%d ", myArray[i]); } printf("\n"); return 0; }

在这个例子中,我们通过 &myArray 将数组的地址传递给函数 modifyArray。函数通过数组指针 int (*pArr)[5] 接收,并可以直接修改原数组的内容。

总结

  • 数组传递:通常是传递数组的首地址,函数内部不知道数组的长度,需要额外传递长度信息。
  • 数组指针传递:传递的是指向数组的指针,可以在函数内部修改数组的内容,对于动态数组和多维数组特别有用。

在实际使用中,选择哪种方式取决于你的具体需求,比如是否需要在函数内部修改数组内容,以及是否关心数组的长度等信息。

2024年6月29日 12:07 回复

你的答案