c语言中&的问题

例如void StrAssign(SqString &str,char cstr[])
{
int i;
for (i=0;cstr[i]!='\0';i++)
str.ch[i]=cstr[i];
str.len=i;
}
为何要在str前加&?不加可以吗?&起了什么作用?

第1个回答  2012-05-18
/*关于这个程序,我觉得应该是考你对结构体的掌握
结构体在我个人的理解,就是把一些有联系的东西集合起来,方便调用
打个比方有二十个人,要记录他们的身高和体重,如果用一般数组记录身高和体重,那么就得定义两个数组,而且用起来还麻烦
但用结构体的话,只用一个结构体的数组就行了,方便,简洁
*/
#include
#define N 2 //定义学生的个数,为了方便调试,我只写了2,你可以把2改为你想要的任意学生数
struct STUDENT //定义一个结构体
{
char name[8];
int num;
float score[3];
float average;
};

void output(struct STUDENT *stu,int n) //输出
{
int i,j,max=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(stu[j].average>stu[i].average)
max=j; //先输出平均分最高的
}
printf("%-8s %-8d %-6.1f\n",stu[max].name,stu[max].num,stu[max].average);
stu[max].average=-1;//输出后标记为-1
}
}

void input(struct STUDENT *stu,int n) //输入
{
int i;
for(i=0;i<n;i++)
{
scanf("%s %d %f %f %f",&stu[i].name,&stu[i].num,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}
}

void calculate(struct STUDENT *stu,int n) //计算平均分
{
int i;
for(i=0;i<n;i++)
{
stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3; //三门课总和除以3
}
}

void main(void)
{
struct STUDENT stu[N];
int i;
printf("请输入:姓名、学号、数学成绩、英语成绩、计算机成绩(每个数据以空格格开)\n");

input(stu,N); //输入
calculate(stu,N); //计算

printf("排序后:\n");
printf("姓名 学号 平均分\n");

output(stu,N); //输出

}

/*
输入:
王五 1111 60 50 40
张三 2222 70 80 90
输出:
姓名 学号 平均分
张三 2222 80.0
王五 1111 50.0
*/
第2个回答  2010-06-16
lz
&是取地址符 C中的值是存在内存中的 想要将值取出来 就要找到地址 &就是用来找地址的
你的那个str是一个结构吧 这里应该可以不用&符号的
第3个回答  2010-06-16
通过SqString &str, str.ch[i]=cstr[i];
str.len=i;
这样的语句,这绝不是C语言,而是C++

void StrAssign(SqString &str,char cstr[])
中的&表示引用传递
相当于给传进来的实参起了个别名一样,str就代表着传进来的那个实际参数本回答被提问者采纳
第4个回答  2010-06-16
呵呵 这里是引用,相当与给主函数中的实参取一个别名str。这样str 和主函数中的实参同时指向一个存储空间。改变str的同时也就改变了主函数中的实参。
在这里的好处,至少函数不用再用返回值了
第5个回答  2020-01-13
相似回答