美文网首页
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