2014-02-11 79 views
2

這是彙總:無法將:: C *轉換爲C *的指針結構

struct a 
{ 
    struct b{ 
    } x; 

    struct c{ 
    } y; 

}; 

main(){ 
    struct a z; 
    fun(&z.y) 
} 
fun(struct c *p){ 
} 

得到錯誤的類型轉換,從一個:: C *到C *,同時傳遞參數的功能。

我的問題是初學者是否可以參與計算器,因爲我的問題似乎更容易得到負面分數。

原來的程序是:

#include<stdio.h> 
#include<conio.h> 

void fun(struct c *p); 
struct a 
{ 
    struct b 
    { 
     int i; 
     float f; 
     char ch; 
    } x; 


    struct c 
    { 
     int j; 
     float g; 
     char ch; 
    } y; 
}; 

void main() 
{ 
    int *p; 
    struct a z; 
    clrscr(); 
    fun(&z.y); 
    printf("\n%d %f %c",z.x.i,z.x.f,z.x.ch) ; 
    getch(); 
} 
void fun(struct c *p) 
{ 
    int offset; 
    struct b *address; 
    offset= (char *) &((struct c *)(& ((struct a*)0)->y)->j)-(char *)((struct a*)0); 
    address =(struct b *)((char *)& (p->j)-offset); 
    address->i=400; 
    address->f=3,14; 
    address->char='s';  
} 

還有一個問題是如何0是在((struct a *)0)類型強制轉換。

+0

這是一個範圍問題。定義你的函數參數爲:: c * – cup

回答

5

錯誤是因爲您正在使用C++編譯器來編譯C代碼。

C代碼沒問題,除了在調用函數之前(如完整程序中所做的)和使用int main之前,您應該添加函數fun的聲明。

對於第二個問題,0在這裏不是一個整數,而是一個空指針,((struct a *)0)是一個空指針,它被強制轉換爲struct a*

+0

非常感謝。我錯過了一些觀點,現在我知道了什麼是錯的。 – user3212719