1、数组做参数,完全无法按值传递。这是由C/C++函数的实现机制决定的。
2、传数组给一个函数,数组类型自动转换为指针类型,因而实际传的是地址。
下面三种函数声明完全等同:
void func(int array[10])
void func(int array[])
void func(int *array)
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
int printArr(int *);
int main()
{
// 产生随机数种子
time_t tms;
int a[5]; // 数组的创建
srand((unsigned int )time(&tms)); /* 注意:z这里传的是地址 */
//初始化数组
for (int i = 0; i < 5; i++)
{
a[i] = rand() % 100 + 100; /* 产生100--200的随机数 */
}
// 输出数组
int printArr(int *a);
getchar();
return 0;
}
// 专门打印数组的函数
int printArr(int *a)
{
printf("the size is %d", sizeof(a));
return 0;
}
问:
打印数组a的长度总是4而不是20?
答:
整型数组作为参数传递时,无法在子函数中获得其长度!只有字符串可以,因为它有一个尾巴标识(‘\0’)!
所以,整型的数组长度,必须与数组名一同传递到子函数才可以!
追问:
char b[15] = {'a', 'b', 'c', 'e', 'a', 'a', 'b', 'c', 'e', '\0'}; 这个好像也不可以,求完整的解决方案。
追答:
你这个也有结束符啊,如果你能规定一个特殊数值作为整数的结束符,则传整型数组也能做到。