cde*_*169 1 c struct pointers function
我已经学习了大约2个月的C,仍然是新手:(
我知道这个网站还有其他类似的问题.我读过它们,但仍然无法理解,所以我在这里.以下是我的代码:
//naming my structure as ball
typedef struct ball_room {
int enter;
int exit;
} ball;
//I've omitted some irrelevant details for brevity
int i, n, max;
scanf("%d", &n);
ball person[n];
.../*assign values to ball.enter and ball.exit with user input*/
max = 1;
for (i = 0; i < n; i++)
if (ball_room(person, person[i].enter, n) > max)
max = ball_room(person, person[i].enter, n);
printf("%d\n", max);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下是接收数组的函数:
//This function returns the number of people in the ballroom
//when b[j](person[j] in "main") enters
int ball_room(ball *b, int i, int n)
{
int people = 0, j;
for (j = 0; j < n; j++)
if (b[j].enter <= i && b[j].exit > i)
people++;
return people;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么它b[j].enter不是b[j]->enter我的编译器不接受的呢?在我有限的经验中,当操纵结构本身(对象)时,我.用来进入结构内部,当它是指针(地址)时,我使用->(希望这是正确的.)
在这种情况下,我将数组传递给函数using ball *b,它代表地址person[0],所以我可以访问整个数组.但不ball *b应该以指针的形式,因此我应该用它->来访问它的内容?它只是我传递给函数的地址.
这是我第一次用一系列结构做一些事情,请帮我清楚一点,谢谢!
你使用.而不是->因为这个参数声明:
int ball_room(ball *b, int i, int n)
b应该是指向具有类型的数据的指针ball,因此您可以通过各种方式访问它:
b[5].somefield = 15- 你在这里使用点,因为如果b是类型ball *,它意味着b是指针或它是具有类型的对象数组b,如果它是具有类型的对象数组b(这是你的情况),你.用来访问对象的字段(b+5)->somefield = 15-它将会做同样的事情,上面的代码,但你会访问数据pointer的方式给定ball *b,b[j]是来自b指向的元素的元素.因此b[j]不是指针; 它是一个结构.由于它是一个结构,因此您可以使用它.来引用其中的成员.
b[j]C标准中的定义是它*((b)+(j)).所以它需要指针b,移动j元素超出它,然后应用*.
既然*已经应用了b[j],你就不需要->了..