在C语言中,指针和数组都可以作为函数参数进行传递。但是它们之间有一些细微的差别。
- 传递指针: 当传递指针作为函数参数时,实际上是传递了指针所指向的内存地址。这意味着在函数内部对该指针所指向的内存进行的修改将会影响到函数外部的变量。例如:
void modify(int *ptr) { *ptr = 10; } int main() { int num = 5; modify(&num); printf("%d\n", num); // 输出10 return 0; }
- 传递数组: 当传递数组作为函数参数时,实际上是传递数组的首地址。这意味着在函数内部无法直接获取数组的长度,因为数组参数会被转换为指针类型。例如:
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}; printArray(arr, 5); // 输出1 2 3 4 5 return 0; }
需要注意的是,虽然数组名会被转换为指针类型,但是在函数内部仍然可以通过下标访问数组元素。另外,为了传递数组长度,通常会将数组长度作为额外的参数传递给函数。