传递整数作为参考和结构作为C中的参考之间的差异

时间:2016-05-21 13:57:57

标签: c

代码1:

#include<stdio.h>

void change(int *);

void main()
{
  int i=5;
  change(&i); 
  printf("The number has changed to:%d\n",i);
}

void change(int *a)
{
  *a=*a+5;
}

代码2:

#include<stdio.h>

#define SIZE 10

struct terms
{
  int coeff;
  int expo;
};

struct poly
{
  struct terms t[SIZE];
  int noofterms;
};

void initpoly(struct poly *);

void main()
{
  struct poly p1;
  initpoly(&p1);
}

void initpoly(struct poly *p)
{
  *p->noofterms=0;
}

在code1中,如果我想更改变量i的值,我必须通过*a=*a+5进行更改,但是当我在code2中执行相同的操作时,它会出错。有什么区别?

1 个答案:

答案 0 :(得分:8)

虽然取消引用指针的常用方法是使用解除引用运算符*,但是另一个解除引用运算符->仅适用于structunion。它结合了星号和点 - 实际上,pointer->field(*pointer).field相同。

因此,不再需要p前面的星号,因为运算符->已经提供了指针取消引用:

p->noofterms=0;