我是一名初学者程序员,想问一问如何在函数中正确使用指向结构的指针(在本例中为getRectangleDimension()
)。
我尝试了这个问题几个小时,然后在该站点上搜索,发现没有任何用处。任何帮助表示赞赏!
#include <stdio.h>
#include <stdlib.h>
#define UNKNOWN -1
struct rectangle
{
int width;
int length;
int area;
};
void getRectangleDimension(struct rectangle* B)
{
printf("what is the width?\n");
scanf("%d", &B.width);
printf("what is the length?\n");
scanf("%d", &B.length);
}
int main()
{
struct rectangle myBox;
myBox.width=UNKNOWN;
myBox.length=UNKNOWN;
myBox.area=UNKNOWN;
getRectangleDimension(&myBox);
printRectangle(myBox);
return 0;
}
答案 0 :(得分:1)
void getRectangleDimension(struct rectangle* B)
{
...
scanf("%d", &B.width);
需要成为
void getRectangleDimension(struct rectangle* B)
{
...
scanf("%d", &(B->width));
为什么? B是指向您的结构的指针。因此B->width
是所传递结构的width成员。 scanf
需要一个指向要扫描的数字的指针。所以你需要&(B->width)
我不会做&B->width
,因为我永远不记得&和->的优先级,因此不确定是(&B)->width
还是&(B->width)
此外,作为常规样式注释,请勿对变量名或arg名使用大写字母。大写通常用于类型和常量。对于大多数C语言阅读器,“ B”作为变量名会导致较小的减速现象
答案 1 :(得分:0)
必须取消引用指针。使用*
运算符可以做到这一点。这是一种非常常见的操作,C语言使用B->width
作为(*B).width
的替身,应该坚决使用。 scanf
需要一个指针&B->width
。