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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2021-09-27 视图解析原理流程