比如有这样一个函数 comp(int *p,int *q)
main(){
int a=3,b=4;
comp(a,b);
}
这里的实参a,b能就这样传过去吗??? 还是必须传地址过去??? 改成comp(&a,&b);
在c语言中怎样使形参值改变实参值也跟着改变必须改成指针,下面的这个程序:
#include <stdio.h>
#define N 10 //N在下列各个函数内的数值都是10,是不变的。
float psalary;
struct st
{int num;
char name[20],birth[20];
float salary;
};
void input1(struct st a[])
{int i;
for(i=0;i<N;i++)
scanf("%d%s%s%f",&a[i].num,a[i].name,&a[i].birth,&a[i].salary);
}
void pj(struct st b[])
{ int i;
float zsalary=0;
for(i=0;i<N;i++)
zsalary=zsalary+b[i].salary;
psalary=zsalary/N;
}
void bijiao(struct st c[])
{ int i,j;
struct st t;
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
if(c[j].salary<c[j+1].salary)
{t=c[j];c[j]=c[j+1];c[j+1]=t;}
}
void output1(struct st d[])
{
printf("最高工资的员工信息:职工号%d,姓名%s,生日%s,工资%.2f\n",d[0].num,d[0].name,d[0].birth,d[0].salary);
}
void output2(struct st e[])
{int i;
for(i=0;i<N;i++)
printf("职工号%d,姓名%s,生日%s,工资%.2f\n",e[i].num,e[i].name,e[i].birth,e[i].salary);
}
void main()
{ struct st s[N];
input1(s); //输入10位员工的信息
printf("\n");
pj(s); //求平均工资
bijiao(s); //按工资从大到小排序,排序各员工的信息
printf("平均工资为:%.2f\n",psalary);//输出平均工资
output1(s); //输出最高工资员工的信息
printf("\n");
printf("各员工信息:\n");
output2(s);//输出排序后各员工的信息
}
input1(s); 这里传进去是个结构体数组 我想问下这个函数过后,S为什么会是输进去的10组数据?
input1也是VOID 无返回值的,另外这里的S是怎么接收输进来的数据的????
或者这个程序就有错?
公司有个新项目是用C,现在得返回去看C了,看到这个有点迷惑。
5 个解决方案
#1
1.还是必须传地址过去??? 改成comp(&a,&b);
2.input1(s); 这里传进去是个结构体数组 我想问下这个函数过后,S为什么会是输进去的10组数据?
数组做函数参数退化为指针.
2.input1(s); 这里传进去是个结构体数组 我想问下这个函数过后,S为什么会是输进去的10组数据?
数组做函数参数退化为指针.
#2
额,你确定是这个原因吗?当然不是不信你
#3
.......................我十分的不确定是这个原因.........................
#4
呵呵 查了下摆度 是这样的 分给你了
#5
1、指针做形参时,需要传地址过去。
即:comp(&a,&b); 形式;
2、数组做形参时,实际上跟指针做形参是差不多的。
数组名就是一个特殊的指针,传进去的数组的首地址.
即:comp(&a,&b); 形式;
2、数组做形参时,实际上跟指针做形参是差不多的。
数组名就是一个特殊的指针,传进去的数组的首地址.
#1
1.还是必须传地址过去??? 改成comp(&a,&b);
2.input1(s); 这里传进去是个结构体数组 我想问下这个函数过后,S为什么会是输进去的10组数据?
数组做函数参数退化为指针.
2.input1(s); 这里传进去是个结构体数组 我想问下这个函数过后,S为什么会是输进去的10组数据?
数组做函数参数退化为指针.
#2
额,你确定是这个原因吗?当然不是不信你
#3
.......................我十分的不确定是这个原因.........................
#4
呵呵 查了下摆度 是这样的 分给你了
#5
1、指针做形参时,需要传地址过去。
即:comp(&a,&b); 形式;
2、数组做形参时,实际上跟指针做形参是差不多的。
数组名就是一个特殊的指针,传进去的数组的首地址.
即:comp(&a,&b); 形式;
2、数组做形参时,实际上跟指针做形参是差不多的。
数组名就是一个特殊的指针,传进去的数组的首地址.