2016-08-21 28 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]'。 –

相關問題