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;
}

浙公网安备 33010602011771号