美文网首页
C语言—使用指针变量初始化指针数组

C语言—使用指针变量初始化指针数组

作者: 周先生不爱吃鱼 | 来源:发表于2018-12-18 14:10 被阅读0次

    C语言中,数组初始化的方式主要有以下几种:

    1.对数组中所有的数组元素赋予初值

    2.只给数组中一部分元素赋予初值

    今天在做课设的时候,突然想用变量初始化数组,

    于是我定义了一个结构体指针变量,然后定义了一维结构体指针数组,

    使用该结构体指针对结构体指针数组赋予初值

    于是有这样子的代码

    BBSTree level1_1 = NULL;       //结构体指针变量
    
    BBSTree Tree[] = {level1_1};  //结构体指针变量数组
    

    在我的想法中,这样做相当于把level_1指针放入指针数组Tree中,

    从这个观点出发的话,那对于Tree[0]的修改就是对于level_1的修改。

    在这个错误观念的驱使下就有如下愚蠢的操作:

    错误的操作

    Tree[0] = (BBSTree)malloc(sizeof(struct BBSTNode));   //赋予地址
    Tree[0]->data = 0;        //对各成员变量赋值                                                  
    Tree[0]->bf  =0;
    Tree[0]->lchild = NULL;
    Tree[0]->rchild = NULL;
    
    然而实际上呢?

    这就要回归文章开头关于数组初始化的方式了。

    1.对数组中所有的数组元素赋予初值

    这句话的重点在于赋予初值

    赋予初值意味着数组元素有自己单独的存储空间可以存放数据(不然哪来的赋予初值?),

    赋予初值也只是把指针变量里的值赋予数组元素

    也就是说:

    数组元素和对数组元素进行初始化的变量有着不同的存储空间,对其中一个操作对另一个操作并没有任何影响

    那么对于Tree[0]进行的操作对于level _1没有任何影响,也不能实现原先的想法。

    对于正确的操作应该是使用一个指向结构体指针的指针数组(这句话有点绕),通过对指针的解引用来实现原先的想法。

    应该把代码改成这个样子:

    正确操作

    BBSTree level1_1 = **NULL**;  //结构体指针变量
    BBSTree* Tree[] = {&level1_1};  //指向结构体指针的指针数组
    *Tree[0] = (BBSTree)malloc(sizeof(struct BBSTNode));   //赋予地址
    (*Tree[0])->data = 0;        //对各成员变量赋值                                                      
    (*Tree[0])->bf  =0;
    (*Tree[0])->lchild = NULL;
    (*Tree[0])->rchild = NULL;
    

    相关文章

      网友评论

          本文标题:C语言—使用指针变量初始化指针数组

          本文链接:https://www.haomeiwen.com/subject/xuxlkqtx.html