在c语言中定义一个global struct 的类型的变量,如
    struct prog{
       int var[26];
       int stack[20];
       int tos;
    };
   typedef struct prog Prog;       
在main中 Prog p;
在调用struct 中元素的时候 ,我存在这样的困惑,什么时候该用“->”操作符,什么时候用“.”错作符呢?在c语言中严格一点"->"是用来表示通过地址取,而“.”不是通过地址取,不严格来讲这两个操作符是一样的,从道理上说如果用错了也不会有什么,但是vc却以错误的信息给出!比如我用p.tos应该是没有问题的,但是vc在编译的时候会爆出error?我想知道这是为什么?以避免在今后编程时发生同样的错误。谢谢!

解决方案 »

  1.   

    如果是Prog *p 则应该是p->tos;如果是Prog P 则应该是p.tos;两个操作符并不是一样的,
      

  2.   

    如果是Prog *p 也可以用这样的形式 (*p).tos;
    看出来了把
      

  3.   

    指针用->,就是这样定义的Prog *p; p->tos
    不是指针的,就用.,如Prog p; p.tos;
      

  4.   

    的确如楼上所说:我定义的是 Prog *p,请教楼上2位大侠还有一个问题,
    定义了如下global struct:
    struct prog {
    char wds[MAXNUMTOKENS][MAXTOKENSIZE];
    int cw;/*current word*/
    int bb;
    int be;
    };
    typedef struct prog Program;struct variables{
    float value_table[26];
    float stack[20];
    int tos;
    };
    typedef struct variables Vars;struct drawpostscript{
    double angle;
    double posx;
    double posy;
    };
    typedef struct drawpostscript Draw;struct file{
    FILE *fip;
    FILE *fop;
    };
    typedef struct file File;
    定义了方法:void Instruction(Program *p,File *file,Draw *draw,Vars *var);
    在main(void){
    .....
    Instruction(p,file,draw,var);//这里为什么不能写成这样Instruction(&p,&file,&draw,&var);呢?
    ...}
    受累给看一下,小弟正在学习指针中
      

  5.   

    Instruction(p,file,draw,var);//这里为什么不能写成这样Instruction(&p,&file,&draw,&var);呢?如果你定义Program p;File file;Draw draw;Vars var;那当然可以写成这样Instruction(&p,&file,&draw,&var);了
      

  6.   

    void Instruction(Program *p,File *file,Draw *draw,Vars *var);
    在main(void){
    .....
    Instruction(p,file,draw,var);//这里为什么不能写成这样Instruction(&p,&file,&draw,&var);呢?
    ...}类型要统一
    写成Instruction(p,file,draw,var);// 这是值传递,而参数中的类型确实指针,而不是一个具体指类型对象
      

  7.   

    那个参数是要求传指针的,而p,file等本身已是指针了就不能再用"&"操作符,因为"&"是取某一对象(变量)或指针的地址(指针)的.如果函数要求传入如"Program** p"这样的参数时像楼主这样传就是对的,要不然编译就不通过,楼主不妨试试看.
      

  8.   

    .和->的确是一个概念的
    (*)p.tos 等于 p->tos
    这样写只是为了方便