C,函数格式中的结构指针

时间:2018-10-26 23:04:28

标签: c pointers structure

我是一名初学者程序员,想问一问如何在函数中正确使用指向结构的指针(在本例中为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;
}

2 个答案:

答案 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