2016-08-21 30 views
0

错误:请求成员在某些东西不是结构或联合中滚动
我想使用指针从结构中访问各自的滚动号,并使用结构指针将它们按升序排列。为什么这个C代码不工作?我无法使用指向结构的指针访问卷号

#include<stdio.h> 
struct student 
{ 
    int roll; 
    struct name 
    { 
     char first[10]; 
     char last[10]; 
    }; 
}; 
void main() 
{ 
    int i,j; 
    struct student stu[10],temp; 
    struct student *ptr; 
    ptr=stu; 
    for(i=0;i<5;i++) 
    { 
     scanf("%d",&(*(ptr+i).roll)); 
    } 
    for(i=0;i<4;i++) 
    { 
     for(j=0;j<5-i;j++) 
      if(*(ptr).roll>*(ptr+i).roll) 
      { 
       temp = *ptr; 
       *(ptr)=*(ptr+i); 
       *(ptr+i)=temp; 
      } 

    } 

} 
+0

我继续使用代码格式化按钮来设置代码的格式。你应该自己做,下次:) –

+0

另外,编译器错误通常包含事情出错的行号,以及对“破坏”语句的引用。 ** Alwas粘贴逐字错误消息,包括上下文**。 –

+1

'&(*(ptr + i).roll)' - >'&ptr [i] .roll' – BLUEPIXY

回答

2

成员选择算子(即,点.)具有比引用操作更高operator precedence

这意味着表达式*(ptr + i).roll被解析为*((ptr + i).roll),这是不正确的。您需要使用像(*(ptr + i)).roll这样的括号。 使用箭头运算符,如(ptr + i)->roll

+2

...或实际使用的事实是,您的'ptr'确实只是一个指向第一个元素的指针你的数组(因为你设置了它!),并且完全不使用'(*(ptr + i))',而只需使用'stu [i]'。 –

相关问题