malloc与指针

1 错误写法

#include <stdio.h>
#include<stdlib.h>

#define MaxSize 10      //定义最大长度
typedef struct{
    int data[10];  //用静态的“数组”存放数据元素 
    int Length;         //顺序表的当前长度
}SqList;                //顺序表的类型定义

//基本操作——初始化一个顺序表
void InitList(SqList *L){
    int i;
    L = (SqList *)malloc(sizeof(SqList));    //分配存放线性空间

    for(i=0; i<10; i++){
        L -> data[i]=1;   //将所有数据元素设置为默认初始值0
    }
    L->Length=0;        //顺序表初始长度为0
}

int main(){
    SqList *L = NULL;          //声明一个顺序表
    InitList(L);       //初始化这个顺序表
    printf("%d",L->data);
    return 0;
}

  在方法中分配空间,

2 正确写法

上面在init函数中,相当于对临时变量形参L(外面的复制)分配了空间,而不是外面的L本身。

把指针传递都看作是值传递,一个是对临时副本进行修改(一级指针),另一个是对临时副本的地址取值后进行修改(二级指针)【真正意义上的修改】。

 
#include <stdio.h>
#include<stdlib.h>

#define MaxSize 10      //定义最大长度
typedef struct{
    int data[10];  //用静态的“数组”存放数据元素
    int Length;         //顺序表的当前长度
}SqList;                //顺序表的类型定义

//基本操作——初始化一个顺序表
void InitList(SqList *L){
    int i;
    for(i=0; i<10; i++){
        L -> data[i]=1;   //将所有数据元素设置为默认初始值0
    }
    L->Length=0;        //顺序表初始长度为0
}

int main(){
    SqList *L = (SqList *)malloc(sizeof(SqList));          //声明一个顺序表,并分配空间
    InitList(L);       //初始化这个顺序表
    printf("%d",L->data);
    return 0;
}

  

posted @ 2022-09-27 13:24  durtime  阅读(61)  评论(0)    收藏  举报