指针与数组关系
现在大家已经明白,数组名,其实是一个常量指针:
int a[10];
a的类型为:int
* const a;//a是常量指针
因此在访问数组元素的时候:
a[i], 与*(a+i)都可以访问第i个元素的值。而&a[i]与a+i都是第i个元素的地址。同样,我们也尅定义一个整数指针pa指向数组的首地址:
int *pa=&a[0];
int *pa=a;
因此pa+i也是第i个元素的地址,而*(pa+i)和pa[i]引用的也是a[i]的值。
利用指针与数组的关系,我们可以动态的分配一段空间,来存放一个班级学生的成绩,这样可以来表示不同班级学生的人数:
int _tmain(int argc, _TCHAR* argv[])
{
int number = 0;
int sum = 0;
printf("Please input the number of students\n");
scanf("%d", &number);
if(number<=0)
return -1;
int *pscore = (int *)malloc(number*sizeof(int));
if(pscore==NULL)
{
printf("memory is not enough\n");
return -1;
}
memset(pscore, 0, number*sizeof(int));
for(int i = 0;i<number;i++)
{
printf("Please input the score %d\n", i);
scanf("%d",pscore+i);//&pscore[i]是可以的
}
for(int i=0;i<number;i++)
{
sum += pscore[i];//*(pscore+i)是可以的
}
printf("The average is:%d\n", sum/number);
free(pscore);
return 0;
}