作为一名C语言初学者,今天在看C Primer Plus的时候脑袋一热突发奇想:是否可以在传递数组的时候少传递一个参数n呢?
void array(int a[], int n);
为了省略这个n,我在函数里用了以下语句
void array(int a[])
{
n = sizeof(a)/sizeof(a[0]);
}
结果显而易见出了问题,debug半天才找出来。
传递的指针是数组的首地址,sizeof( a )这种方式是得不到数组容量的。
具体原因如下:
#include <stdio.h>
#include <stdlib.h> //malloc的原型
void array(int a[]);
void pointer(int *a);
int main()
{
int n = 100, i;
int a[100];
for (i=0;i<100;i++)
a[i] = i * i + 1;
printf("In main(), sizeof a is %d\n", sizeof(a));
array(a);
int *p = (int *)malloc(n * sizeof(int));
for (i=0;i<100;i++) *(p+i) = i+1;
pointer(p);
free(p);
return 0;
}
void array(int a[])
{
printf("In array(), sizeof a is %d\n", sizeof(a));
}
void pointer(int *a)
{
printf("In pointer(), sizeof a is %d\n", sizeof(a));
}
所以还是老老实实传2个参数,第一个参数是首地址,第二个参数为数组大小
void array(int a[], int n);