chrislee
数组和指针的关系
- 函数的参数中 数组类型参数
int a[]
本质是指针 可以直接换成 int *a
;
- 可以用数组的运算符
[]
进行运算,而且可以通过a[0]
就直接修改了外面的数组元素;
size of(a) == sizeof(int *)
所以函数内部没法用sizeof
得到数组的长度 只能传一个len
;
// 一个整型数组的指针,长度为 len, 得到数组中的最小值和最大值 ———— 从外部传入两个指针,从而将所求的两个结果保存带出来,得到多个返回值。
void minMax(int a[], int len, int *min, int *max) {
int i;
*min = *max = a[0]; //假定最大值 最小值相等 为a[0]
for(i= 1; i < len, i++) {
if( a[i] < *min) {
*min = a[i];
}
if(a[i] > *max) {
*max = a[i];
}
}
}
int a[] = {1, 2, 3, 4, 5, 7, 8, 9, 15, 18, 25, 33};
int min, max;
minMax(a, sizeof(a)/ sizeof(a[0]), &min , &max );
printf( "min = %d, max = %d \n", min, max);
- 数组变量是特殊的指针,数组变量本身表达地址,int a[10]; int *p =a;
- 数组变量无需用取址符& ;
- 数组的元素表达的是变量,需要用&取地址,如 m = &a[0];
[]
运算符可以对数组做,也可以对指针做 p[0] == a[0]
;
*
运算符可以对指针做,也可以对数组做 *a = 25
, *a可以得到或者修改数组首个元素的值;
- 实际上数组是 const 的指针,所以不能被赋值。 如果
int a[] = {1,2,5,7}
; int b[]
,由于 int b[]
实质上等价于 <===> int const *b; b 是一个常数,不能被改变,初始化出来代表这个数组就不能再改变。 b = a; (错误) 数组变量之间是不可以这样互相赋值的。 而 int *q = a; 这样是可以的。