美文网首页
1数据结构之init初始化数组代码

1数据结构之init初始化数组代码

作者: 定一 | 来源:发表于2020-05-19 18:20 被阅读0次
    #include<stdio.h>
    struct Arr 
    {
        int *pBase; //存储数组第一个元素的地址 
        int len;    //数组所能容纳的最大元素的个数 
        int cnt;    //当前数组有效元素个数 
    };
    
    void init_arr(struct Arr array);    //初始化数组 
    
    int main(){
        struct Arr arr;
        init_arr(arr);
        printf("%d\n",arr.len);
        return 0;
    }
    
    void init_arr(struct Arr array){
        array.len=99;
    }
    

    上述通过对形参的修改,并没有改变实参的值,即以上不能初始化数组的长度,

    image.png
    需要使用指针变量,来让形参指向实参的地址,才能通过调用改变实参的值

    无论一个变量有多大,它的地址只用第一个字节的地址表示只占4个字节

    &:取地址符
    &arr代表arr的地址

    关键代码如下:

    void init_arr(struct Arr *pArr);    //初始化数组 
    
    int main(){
        struct Arr arr;
        init_arr(&arr);
        printf("%d\n",arr.len);
        return 0;
    }
    void init_arr(struct Arr *pArr){
    //这样,*pArr就代表了实参中的arr
        (*pArr).len=99;
    }
    
    image.png

    进阶:
    pArr->pBase:指针变量pArr指向结构体变量中pBase这个成员

    #include<stdio.h>
    struct Arr 
    {
        int *pBase; //存储数组第一个元素的地址 
        int len;    //数组所能容纳的最大元素的个数 
        int cnt;    //当前数组有效元素个数 
    };
    
    void init_arr(struct Arr *pArr,int length); //初始化数组 
    
    int main(){
        struct Arr arr;
        init_arr(arr);
        printf("%d\n",arr.len);
        return 0;
    }
    
    void init_arr(struct Arr *pArr,int length){  
    
        pArr->pBase=(int*)malloc(sizeof(int)*length);//为其分配内存
    //此时分配的有24个字节,但是只是把第一个字节赋给pBase
        if(NULL==pArr->pBase){
            printf("动态内存分配失败\n");
            exit(-1);//终止整个程序       
        } 
        else{
            pArr->len=length;
            pArr->cnt=0;
            return ;
        } 
    }
    

    相关文章

      网友评论

          本文标题:1数据结构之init初始化数组代码

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