指针与数组
传入函数的数组组成了什么?
int isPrime(int x, int knownPrimes[], int numberOfKnoenPrimes)
{
int ret = 1;
int i;
for ( i=0; i<numberOfKnoenPrimes; i++){
if ( x % knownPrimes[i] == 0){
ret = 0;
break;
}
}
return ret;
}
- 函数参数表中的数组实际上是指针
- sizeof(a) == sizeof(int*)
- 但是可以用数组的运算[]进行运算
#include<stdio.h>
void minmax(int a[], int len, int *max, int *min);
int mian(void)
{
int a[] = {1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,55,};
int min,max;
printf("main sizeof(a)=%lu,"sizeof(a));
printf("main a=%p\n",a);
minmax(a, sizeof(a)/sizeof(a[0]), &min, &max);
printd("a[0]=%d\n", a[0]);
printf("min=%d,max=%d\n" ,min, max);
return 0;
}
void minmax(int a[], int len, int *min, *max)
{
int i;
prrintf("minmax soizeof(a)=%lu\n", sizeof(a));
printf("minmax a=%p",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];
}
}
}
main size(a)=68
main a=0xbff67d10
minmax sizeof(a)=4
minmax a=0xbff67d10
a[0]=1000
min=2,max=1000
#include<stdio.h>
void minmax(int *a, int len, int *max, int *min);
int mian(void)
{
int a[] = {1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,55,};
int min,max;
printf("main sizeof(a)=%lu,"sizeof(a));
printf("main a=%p\n",a);
minmax(a, sizeof(a)/sizeof(a[0]), &min, &max);
printd("a[0]=%d\n", a[0]);
printf("min=%d,max=%d\n" ,min, max);
return 0;
}
void minmax(int *a, int len, int *min, *max)
{
int i;
prrintf("minmax soizeof(a)=%lu\n", sizeof(a));
printf("minmax a=%p",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];
}
}
}
main size(a)=68
main a=0xbff67d10
minmax sizeof(a)=4
minmax a=0xbff67d10
a[0]=1000
min=2,max=1000
数组参数
- 以下四种函数原型是等价的:
- 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]
-
*运算符可以对指针做,也可以对数组做
- *a=25
-
数组变量是const的指针,所以不能被赋值
- int a[]<==>int *const a=...
网友评论