首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问一个函数参数有关问题

2013-09-06 
请教一个函数参数问题#include stdio.h#define Max 5int *pf(int [],int n)int k[Max]int main(){int

请教一个函数参数问题
#include <stdio.h>
#define Max 5
int *pf(int [],int n);
int k[Max];

int main()
{
int total=0,k;
int i[Max]={10,20,30,40,50};
int *ptr;
ptr=pf(i,Max);
printf("ptr=%p\n\n",ptr);

for(k=0;k<Max;k++)
{
printf("k[%d]=%d \n",k,*(ptr+k));
total+=*(ptr+k);
}

printf("total is %d\n",total);

return 0;
}

int *pf(int x[],int n)
{
int m;

int j[]={100,200,300,400,500};

for(m=0;m<n;m++)
{
k[m]=j[m]+x[m];
printf("k[%d]=%d\n",m,k[m]);
}

printf("k=%p\n",k);

return k;
}


问题:
     在函数int *pf(int x[],int n)中,要求输入参数类型是 int x[] 也即等价于 : int *x, 属于地址类型,那么为何在k[m]=j[m]+x[m],可以使用x[m]这种方式? 这个是一个值,而不是一个地址类型,请各位指点,谢谢!
[解决办法]
数组和指针有相似性,你传参数是a[],传的是数组的首地址(也是一个指针),通过a[i]移动指针;传参数*a,传的是指针的首地址,通过a++(也可用a[i])移动指针。
不同的是数组a[]是指针常量,不能用a++;而指针*a是指针变量,可以用a++,从某种意义上说,数组是指针的子集。
[解决办法]
a[3]==*(a+3)==3[a]
[]操作符本来就属于指针的用法,数组使用它还需要经过“数组名隐式转化为指向数组首元素的临时指针常量”
[解决办法]
不涉及类型转换的情况下:
指针值[下标值]  与 *(指针值+下标值)是一样的。
而“指针值”即可以是指针常量(如数组名)也可以是指针变量(它指向了数组首元素)

另外,函数的参数写成“type []", 实际上它不是数组,而是指针变量

热点排行