数组和指针的关系
函数参数表中的数组实际上是指针
sizeof(a) == sizeof(int*)
可以用数组的运算符[]进行运算
#include <stdio.h>
void minmax(int a[], int len, int *min, int *max); //定义最大值和最小值函数
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9,12,13,14,15,16,17,21,25, };
int min, max;
printf("main sizeof(a)=%lu\n", sizeof(a)); //以无符号长整型输出主函数中的数组a的大小
printf("main a=%p\n", a);
minmax(a, sizeof(a)/sizeof(a[0]), &min, &max);
printf("a[0]=%d\n", a[0]);
printf("min=%d, max=%d\n", min, max);
return 0;
}
void minmax(int a[], int len, int *min, int *max)//可等价写为void minmax(int *a, ……)
{
int i;
printf("minmax sizeof(a)=%lu\n", sizeof(a)); 输出传入函数中的数组a的大小
printf("minmax a=%p\n", a);输出函数中的数组a的地址
a[0] = 1000;
*min = *max =a[0];
for (i=1; i<len; i++)
{
if (a[i] < *min)
{
*min = a[i];
}
if (a[i] > *max)
{
*max = a[i];
}
}
}
四种函数原型等价
int sum(int *ar, int n);
int sum(int *, int);
int sum(int ar[], int n);
int sum(int [], int);
不是类型等价,在参数表中出现,作为函数原型是等价的
数组变量本身表达地址,所以
int a[10]; int *p=a;
数组的单元表达的是变量,需要用&取地址
a == &a[0]
[]运算符可以对数组做,也可以对指针做
p[0] <==> a[0]
继上方代码
int *p=&min;
printf("*p=%d\n", *p);
printf("p[0]=%d\n", p[0]);
输出数值相等
号可以对指针做,也可以对数组做
如a = 25
上方a[],写成*a输出1000,可以读也可以写
实际上,数组是 const的指针
int b[] --> int * const b
b是一个常数,不能被改变,是一个常量指针