1.会产生野指针的做法

#include <stdio.h>

//这就是一种错误的写法
int main(){
int *p = NULL;
p = (int *)malloc(); //释放P所指向的内存空间,但指针变量p仍然留在栈中,成为了野指针
if (p != NULL){
free(p);
} if (p != NULL){
free(p);
}
return ;
}

2.正确的做法:

#include <stdio.h>//指针变量和指针所指向的内存变量是两个不同的概念
//使用动态内存分为三步
//1.定义时,将指针为定义NULL
//2.释放内存时,把指针变量重新赋值或者NULL
//3.释放内存后,把指针变量赋值为NULL
int main02()
{
int *p = NULL;
p = (int *)malloc(); //这才是正确的写法
if (p != NULL){
free(p);//释放P所指向的内存空间,但指针变量p仍然留在栈中,成为了野指针
p = NULL;//释放野指针
} return ;
}

3.间接赋值是指针存在的最大意义

间接赋值的条件:
(1)定义实参(普通变量)和形参(指针变量)
(2)把实参的地址传给形参
(3)利用形参来修改实参的值

被调用函数分配的内存,结果传出来的两种方法
(1)return
(2)指针做函数参数

//这种方式是通过return将函数分配的内存传给被调用函数
char *getBuf()
{
char *p = NULL;
p = (char *)malloc();
strcpy(p, "zhanghanzhi");
return p;
}
//这种方式是通过指针作为函数参数间接赋值
void getBuf(char *p)
{
char tmp = NULL;
tmp = (char *)malloc();
strcpy(tmp, "zhanghanzhi");
p = tmp;
}
int main()
{
  //1.定义实参(普通变量)和形参(指针变量)
  char *p;   //2.把实参的地址传给形参
  //3.利用形参来修改实参的值
  getBuf(p);   return ;
}

4.几个本质

数据类型:数据类型的本质是固定大小内存的别名。对变量声明数据类型,是为了告诉编译器分配几个字节的内存。

变量:变量的本质是一段内存空间的别名。也就是给一段内存空间取一个新的名字,就是变量。

指针:指针也是一种数据类型,它的值是某一个内存空间的地址。指针的步长根据它指向的内存空间的数据类型而定。

*p在等号左边是对p所指向的内存空间赋值;*p放在等号的右边是对p所指向的内存空间取值。

数组中[]的本质:假如有数组array,则array[i]等价于*(array+i),是因为[]对于程序员来讲是友好的,但是编译器最终还是要将它理解为指针,也就是数组作为函数参数时的退化。array[i] ==> array[0+i] ==>*(array+i)

最新文章

  1. 通过IEnumerable和IDisposable实现可暂停和取消的任务队列
  2. arguments
  3. oracle分组取第一条
  4. oracle数据导出工具sqluldr2
  5. [pjsip]Pjlib中的链表结构
  6. hi,mongo!(1)
  7. Tomcat启动时为什么要配置CATALINA_HOME环境变量??
  8. MySQL Workbench类型之MySQL客户端工具的下载、安装和使用
  9. CentOS 系统中安装postfix+dovecot+openwebmail &lt;转&gt;
  10. JavaScript适配器模式
  11. https原理及实践
  12. BZOJ 2064: 分裂 [DP 状压 转化]
  13. react-native-printer
  14. Linux编程 14 文件权限(用户列表passwd,用户控制shadow,useradd模板与useradd命令参数介绍)
  15. css解决滚动弹出层里边的滚动条时带动了整个页面滚动的问题
  16. oozie JAVA Client 编程提交作业
  17. STM32 输入捕获配置
  18. Maven项目标准目录结构
  19. setTimeout问题
  20. hdu2824 The Euler function(欧拉函数个数)

热门文章

  1. Email standards
  2. oracle IMP-00085: 为无界导出文件指定了多个输入文件
  3. 查看运行中的Java其配置的堆大小
  4. (TOJ 4413)IP address
  5. 【CF708E】Student&#39;s Camp 组合数+动态规划
  6. [sharepoint]Office Web Apps for SharePoint 2010
  7. python 测试框架之---testtools
  8. Android 使用MediaPlayer 播放 视频
  9. mac操作
  10. 我的node+express小例子