关于c语言中结构体的一点小问题

假设上面已经定义好了相关变量
…………
scanf("%d %s %f",&student1.num,student1.name,&student1.score);
………………

这个"&"到底啥时候加,啥时候不加,有什么规则吗

第1个回答  2018-12-10
& 是求地址运算符,当需要用地址时,例如 整型变量名,浮点变量名已知时,需要用地址,则加它。
例子: int num; float score; double exp; 输入格式 %d %f %lf:
scanf(" %d %f %lf",&num, &score, &exp);
例子: int num[5]; float score[5]; double exp[5]; 输入一个数组元素i,格式 %d %f %lf:
i=3;
scanf("%d %f %lf",&num[i], &score[i], &exp[i]);
注意,字符数组,输入字符串时用格式 %s,数组名就是数组首地址,这时不加 &:
char str[80]; scanf("%s" , str); 拍入 good_string, str 获得 "good_string"(双引号)
注意,字符数组,输入字符串时用格式 %c, 输入一个数组元素 加 &:
char str[80]; i=0; scanf("%c", &str[i]); 拍入 A, str[i] 获得 字符常量 'A' (单引号)。
你的 &student1.num,student1.name,&student1.score 这里成员name 是 char 数组,student1.name 已是字符串首地址,不能再加 &。
第2个回答  2018-12-10
除了char类型的数组和指针类型外,其它都需要加。假设m是结构体的一个成员,如果m是这样定义的:char m[数组长度]或类型 *m(假设已对m赋值,m已指向一个变量),则输入m时,不需要加&。
第3个回答  2018-12-10
你好!首先&是取地址符号,是取变量的地址,而字符串变量在内存中存放的直接是地址,所以不用加&符号,也就是%s对应的字符串变量。
而其他C语言中整型int,浮点型数float,double,字符char都需要用&符号。追答

你的代码中,name这个结构体成员是字符串类型,所以不用加&号。

如果有不明白的地方或者其他问题可以追问我!

本回答被提问者采纳
第4个回答  2018-12-10
南宋 辛弃疾追问

老哥,你是打酱油的吧

关于c语言中结构体的一点小问题
char str[80]; scanf("%s" , str); 拍入 good_string, str 获得 "good_string"(双引号)注意,字符数组,输入字符串时用格式 %c, 输入一个数组元素 加 &:char str[80]; i=0; scanf("%c", &str[i]); 拍入 A, str[i] 获得 字符常量 'A' (单引号)。...

关于C语言结构体指针的一个疑问?
出现此问题的原因在于链表创建create函数有问题,问题定位在图中红色框内。此处每个节点使用的是局部变量,函数结束后,局部堆栈虽然内容不会清除,但内存会被回收,如果其它地方也使用堆栈可能会分给它用,内存内容就会改变。正确的方式是申请堆内存。使用malloc函数,同时包含头文件#include<stdlib.h>。框内...

c语言结构体问题
\/\/printf ("%-6c%2c",stu[stuIndex].scores[i].level.32); } printf ("%-6.2f%2c",stu[stuIndex].totalScore,32); \/*总分*\/ printf ("%-6.2f%2c",stu[stuIndex].averageScore,32); \/*平均分*\/ printf ("%-8c%2c",stu[stuIndex].totalLevel,32); \/*总分数段*\/ putchar ('\\n')...

C语言中关于结构体的问题,不知道为这个程序哪里错了,它说:undefined ref...
} void print(struct Student stu){ printf("\\n%d %s ",stu.num,stu.name);printf("%.1f %.1f %.1f\\n",stu.score[0],stu.score[1],stu.score[2]);}

C语言结构体问题
struct x *pn 代表了pn是一个指向 struct x 类型的指针,所以,当 执行 (++pn)时,pn指针指向的地址增加的数量 等于 struct x 的字节数 也就是 int + int + float 的字节数 所以指向一个未知的空间 (此处的值默认为0)---所以并非楼主认为的变成指向 c 知识点类比:int *p = &n,...

关于c语言结构体变量成员引用的问题
(3)、与(2)类似,是指针间的赋值,必须保证左右操作数的指针类型是一致的。由于n是结构体sk的第一个变量,因此其地址与结构体变量地址相同,可以强制转换得到正确的地址。(4)、c是一个二维数组,p是一个指向数组的指针,因此p的*运算都是得到一个数组,**运算才能取到数组中的值。只有D是**...

请问下C语言中的结构体有什么用
结构体作用:结构体和其他类型基础数据类型一样,只不过结构体可以做成你想要的数据类型。在实际项目中,结构体是大量存在的,研发人员常使用结构体来封装一些属性来组成新的类型,结构体在函数中最主要的作用就是封装,封装的便利是可以再次利用,再次使用的时候只要根据定义使用就可以,结构体可以定义一些...

关于C语言结构体的问题。为什么返回一直错误?代码如下。
函数范围一个结构体对象Load;但是你的返回的load的类型是Load load[];是一个数组,或者说是一个指针。可以把函数返回改成: Load* Input(Load load[], int n);

c语言结构体问题想问一下a【i】.s什么意思?谢谢!
a是结构体数组,i是这个数组的第i个结构体;a[i]同一个类型数据的一个指针,这儿是判断s指向的这个结构里的成员s是否比a[i]里的s大;s是指向结构数组a的某一个值,这实际就是比较结构数组a里面的2个元素的s的值的大小。例:struct A { int s;}a[i];A *s;...

C语言结构体与链表问题【急】【急】【急】【急】【急】【急】【急...
首先回答第一个问题,程序当中存在以下这几个问题:(1) char name[ ]中的数组name没有指定大小,此处可以定义为name[20](2) p = stu也有错误,应该将结构体的首地址赋给指针p,从而使p指向该结构体。正确的写法是:p = &stu;(3) (*p).name = "Mary"也有错误,此处不能这么赋值。正确的...

相似回答