数组元素可以用作函数实参,但不可以用作形参。
因为形参是在函数被调用时临时分配存储单元的,不可能为一个数组元素单独分配存储单元(数组是一个整体,在内存中占连续的一段存储单元)
在用数组元素做函数实参时,把实参的值传给形参,是”值传递“方式。
数据传递的方向是从实参传到形参,单向传递。
数组名也可以作为函数的形参和实参,传递的是首元素的地址。
sizeof()只读取类型名,在函数中sizeof(a)只占8个字节。
一维数组的使用;
打印数组
void printArray(int a[10] ,int len)
{
int i;
for(i = 0;i < len;++i)
{
printf("%d,",a[i]);
}
printf("\b \n");
}
数组求和
int sumOfTheArray(int a[], int len)
{
int i;
int sum = 0;
for(i = 0;i < len;++i)
{
sum +=a[i];
}
return sum;
}
求数组最大值
int maxOfTheArray(int a[],int len)
{
int max;
max = a[0];
int i;
for(i = 0;i < len;++i)
{
if(max < a[i])
{
max = a[i];
}
}
return max;
}
字符型数组
字符型数组在形参传参时,不需要传递元素个数,它是通过‘\0’作为结束语句来判断。
形参用const修饰后,实参用数组名或字符串常量都可。
打印字符;
void Puts(char s[])
{
int i = 0;
while(s[i] != '\0')
{
putchar(s[i]);
++i;
}
putchar('\n');
}
二维数组
形参要传首元素地址,也要传行数。
打印数组
void printArray2D(int a[][4],int rows)
{
int cols = sizeof(a[0]) / sizeof(a[0][0]);
int i, j;
for(i = 0;i < rows;++i)
{
for(j = 0;j < cols;++j)
{
printf("%2d",a[i][j]);
}
puts(" ");
}
}
取最大值
int maxOfTheArray2D(int a[][4],int rows)
{
int cols = sizeof(a[0]) / sizeof(a[0][0]);
int max,i,j;
max = a[0][0];
for(i = 0;i < rows;++i)
{
for(j = 0;j < cols;++j)
{
if(max < a[i][j])
{
max = a[i][j];
}
}
}
return max;
}
边缘数之和
int sumRoundOfArray2D(int a[][4],int rows)
{
int i ,j;
int sum = 0;
int cols = sizeof(a[0]) / sizeof(a[0][0]);
for(i = 0;i < rows;++i)
{
for(j = 0;j < cols;++j)
{
if(i == 0||i == rows -1||j == 0||j == cols - 1)
{
sum += a[i][j];
}
}
}
return sum;
}
二维字符型数组
字符的倒叙
int reverseString(char s[][100],int rows)
{
int i;
for(i = 0;i < rows / 2;++i)
{
char t[100];
strcpy(t,s[i]);
strcpy(s[i],s[rows - i -1]);
strcpy(s[rows - i -1],t);
}
}
字符的排序
void sortStrings(char s[][100],int rows)
{
int i, j ;
for(i = 0;i < rows -1;++i)
{
for(j = i + 1;j < rows;++j)
{
if(strcmp(s[i],s[j]) > 0)
{
char t[100];
strcpy(t,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],t);
}
}
}
}
查找字符
int bianaryFindStrings(char s[][100],int rows,char n)
{
int begin,end,mid;
begin = 0;
end = rows - 1;
mid = (begin + end) / 2;
while(begin <= end)
{
if(strcmp(n,s[mid]) > 0)
{
begin = mid + 1;
}
else if(strcmp(n,s[mid]) < 0)
{
end = mid - 1;
}
else
{
return mid;
}
}
if(begin <= end)
{
return mid;
}
return -1;
}