为什么stud-> names.firstName不需要地址运算符? 但是& stud-> studentid?
需要地址运算符struct student {
struct
{
char lastName[10];
char firstName[10];
} names;
int studentid;
};
int main()
{
struct student record;
GetStudentName(&record);
return 0;
}
void GetStudentName(struct student *stud)
{
printf("Enter first name: ");
scanf("%s", stud->names.firstName); //address operator not needed
printf("Enter student id: ");
scanf("%d", &stud->studentid); //address operator needed
}
答案 0 :(得分:4)
这不仅不需要,而且不正确。因为数组 1 会自动转换为指针。
以下
scanf("%s", stud->names.firstName);
相当于
scanf("%s", &stud->names.firstName[0]);
所以在这里使用operator的地址是多余的,因为两个表达式都是等价的。
像使用"%d"
格式说明符一样使用它
(这是错误的)
scanf("%s", &stud->names.firstName);
会出错,实际上会出现未定义的行为。
注意:始终验证从scanf()
返回的值。
1 也称为数组名称