1. 程式人生 > >c語言結構體指標 【結構體各種噁心巢狀】

c語言結構體指標 【結構體各種噁心巢狀】

#include<stdio.h>
struct s1
{
    float a;


    struct
    {
        int ba;
        int bb;
        struct
        {
            int bca;
            int (*bcb)[3];
        } *bc;
    } b;
};

要求是:用結構體往bcb裡寫入3用指標讀出來;

首先:

struct {}b這是一種結構體定義沒有給出該結構體的名稱,但是定義了一個該結構體的變數b,也就是說,若是想要在別處定義該結構體的變數是不行的,只有變數n這種在定義結構體的同時定義變數才行。【是不是很噁心!,寫點兒大眾typedef 的不好麼】

struct {}*bc應該類似於上面。

int (*bcb)[3]這是陣列指標,陣列指標就是說陣列一個個元素裡存的型別是指標型別的值 ,

然後 繼續思考去,好多需要思考,結構體巢狀有意思麼,沒有意思!!!

然後:(*結構體指標變數).成員名 與 結構體指標變數->成員名 是等價的,為什麼等價我就不造了

    struct s1 s={1.1,{1,2,{1,3}}};//這樣初始化可以,但是如果分成兩句變成直接賦值不可以,為什麼呢
#include<stdio.h>
struct s1
{
    float a;
    struct
    {
        int ba;
        int bb;

        struct
        {
            int bca;
            int (*bcb)[3];
        } *bc;
    } b;
};
int main( void )
{
    int a[3]={3};
    struct
    {
        int bca;
        int (*bcb)[3];
    }bc=
    {
        3,
        &a
    };

    struct s1 s=
    {
        3.14,
        {
            1,
            2,
            ( void* )&bc
        }
    };
    struct s1 *p=&s;
    printf("%d\n",*(p->b.bc->bcb)[0]);
    return 0;
}//這是久久寫的,就非常好看懂了,
但是我覺得今日很懵逼,唉,今日所獲微,今日獲一堆問題,什麼才算分配記憶體呢,我感覺初始化就已經分配了啊,,,溜,明天先自己謝謝,或者問問人類