人生到头来,就是不断放下,但永远最令人心痛|

durtime

园龄:4年8个月粉丝:10关注:1

malloc与指针

1 错误写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#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本身。

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

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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;
}

  

本文作者:durtime

本文链接:https://www.cnblogs.com/durtime/p/16734269.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   durtime  阅读(44)  评论(0编辑  收藏  举报
历史上的今天:
2021-09-27 视图解析原理流程
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开