2014-09-19 71 views
-4
#include<stdio.h> 
struct s_{ 
     int b; 
}s; 

int func1(s** ss){ 
     *ss->a = 10; 
} 
int func(s* t){ 
     func1(&t); 
} 
int main(){ 
     s a; 
     func(&a); 
     printf("\n a : %d \n",a.b); 
     return 0; 
} 

嘗試示例程序並獲得o/p錯誤。error'expected')'before'*'token

O/P:

[[email protected]]# gcc d.c 
d.c:6: error: expected ‘)’ before ‘*’ token 
d.c:9: error: expected ‘)’ before ‘*’ token 
d.c: In function ‘main’: 
d.c:13: error: expected ‘;’ before ‘a’ 
d.c:14: error: ‘a’ undeclared (first use in this function) 
d.c:14: error: (Each undeclared identifier is reported only once 
d.c:14: error: for each function it appears in.) 
+3

你忘了''struct'前typedef'關鍵字? – 2014-09-19 11:39:36

+6

有一個錯誤,請閱讀[運算符優先順序](http://en.cppreference.com/w/c/language/operator_precedence)。對於另一個錯誤,名爲'a'的結構中沒有成員。對於另一個*錯誤,'s'是一個變量。 – 2014-09-19 11:40:11

回答

6
  1. 您省略了typedef,您需要聲明您的結構別名s
  2. 該結構的成員是b而不是a
  3. 您無法從您的功能中返回任何內容。這些應該是無效的功能。
  4. 您需要在附近左右。
  5. 無參數mainCint main(void)

 

#include <stdio.h> 

typedef struct s_{ 
     int b; 
}s; 

void func1(s** ss){ 
     (*ss)->b = 10; 
} 

void func(s* t){ 
     func1(&t); 
} 

int main(void) 
{ 
     s a; 
     func(&a); 
     printf("\n a.b : %d \n", a.b); 
     return 0; 
} 
+0

6.爲清晰起見,您應該將main定義爲int main(void)。 – Jens 2014-09-19 11:44:07

3

看你的代碼後,很明顯,你錯過了typedef關鍵字struct

struct s_{ 
     int b; 
}s; 

前應

typedef struct s_{ 
     int b; 
}s; 

*ss->a = 10; //wrong. operator precedence problem 
      // `->` operator have higher precedence than `*` 

有沒有會員名稱a。它應該是

(*ss)->b = 10; 
1

如圖所示sstruct s_類型的一個對象。你不能把它用作函數原型的類型。你是否想要引入一個類型別名typedef