规则一:Main(主调函数)分配的内存(在堆区,栈区、全局区)都可以在被调用函数里使用。如果在被调用函数里面的临时区(栈)分配内存,主调用函数是不能使用的。

  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "string.h"
  4.  
  5. char * getstring1()
  6. {
  7. char *p1 = "abcde";
  8. return p1;
  9. }
  10.  
  11. char * getstring2()
  12. {
  13. char *p2 = "abcde";
  14. return p2;
  15. }
  16.  
  17. char * getstring3()
  18. {
  19. char buf[];
  20. strcpy(buf, "abcde");
  21. return buf;
  22. }
  23.  
  24. void main()
  25. {
  26. int i= ;
  27.  
  28. //指针指向谁就把谁的地址赋给指针变量。
  29. char *p1 = getstring1();
  30. char *p2 = getstring2();
  31. char ******* p3 = NULL; //p3 是个变量
  32. // printf("p1:%s\n", p1);
  33. // printf("p2:%s\n", p2);
  34. //
  35. // printf("p1:%d\n", p1);
  36. // printf("p2:%d\n", p2);
  37.  
  38. printf("p4:%s\n", p4);
  39.  
  40. //指针变量和它所执行的内存空间变量是两个不同的概念
  41. strcmp(p1, p2);
  42.  
  43. system("pause");
  44. }

规则二:间接赋值,注意内存冲突。

  1. #include "stdio.h"
  2. #include "string.h"
  3. #include "stdlib.h"
  4. //看见一级指针,要去分辨指针的输入输出特性
  5. //指针的输入特性:在主调函数里面分配内存,在被调用函数里面使用
  6. //指针的输出特性:在被调用函数里面分配内存,主要是把运算结果甩出来
  7. int getLen3(int *p /*in out*/)
  8. {
  9. //*(NULL) = 40;
  10. //*(0) = 40;
  11. *p = ; //间接赋值 如果p是a的地址,那么就间接的修改a的值 //*p形参,去间接的修改实参的值
  12. }
  13. void main()
  14. {
  15. int a = ; //定义了一个变量(实参)//a看成0级指针
  16. int * p = NULL; ////定义了一个变量(形参)//1级指针
  17. a = ; //直接修改a的值
  18. printf("a:%d \n", a);
  19. //p = &a; //a的地址赋给p //把一个变量去地址传给另外一个变量 //实参取地址传给形参
  20. getLen3(p);
  21. getLen3(NULL);
  22. printf("a:%d \n", a);
  23. system("pause");
  24. }
  1. //*(NULL) = 40;
  2. //*(0) = 40;
    getLen3(NULL);
    不同的编译器会有不同的提示。地址为为零的内存空间归系统所以,程序修改里面的内容,会出错。

C++指针二(易错模型)的更多相关文章

  1. C语言指针的易错点

    1.内存泄漏:申请的堆内存没有释放. 2.内存污染:前面非法操作使用内存(没有报错),后面写着写着就出错.如下代码: 当结构体中只有划线部分代码时,在编译器中编写不会报错,但此时已经造成非法操作内存, ...

  2. C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间

    1 作业讲解 指针间接操作的三个必要条件 两个变量 其中一个是指针 建立关联:用一个指针指向另一个地址 * 简述sizeof和strlen的区别 strlen求字符串长度,字符数组到’\0’就结束 s ...

  3. 细节!重点!易错点!--面试java基础篇(二)

    今天来给大家分享一下java的重点易错点第二部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.字符串创建与存储机制:当创建一个字符串时,首先会在常量池中查找是否已经有相同的字符串被定义,其判断 ...

  4. C++二级指针第二种内存模型(二维数组)

    C++二级指针第二种内存模型(二维数组) 二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”. 定义 类型说明符 数组名[常量表达式][常量表达式] 例如: float a[3][4 ...

  5. *C语言有关指针的变量声明中的几个易错点

    转至:http://my.oschina.net/ypimgt/blog/108265   Technorati 标签:  指针, typedef, const, define 我们都知道,至少听说过 ...

  6. C语言指针与数组的定义与声明易错分析

    部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告 ...

  7. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

    本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...

  8. JavaGuide易错点总结

    基础知识易错点 1. object.equals("str") 容易报空指针异常,应使用"str".equals(object); 还可以使用JDK7引入的工具 ...

  9. 细节!重点!易错点!--面试java基础篇(一)

    今天来给大家分享一下java的重点易错点部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.java中的main方法是静态方法,即方法中的代码是存储在静态存储区的. 2.任何静态代码块都会在ma ...

随机推荐

  1. Numpy copy & deep copy

    1. '='的赋值方式会带有关联性 >>> import numpy as np >>> a = np.arange(4) >>> b = a & ...

  2. snort帮助文档

    [1] CentOS6.6下基于snort+barnyard2+base的入侵检测系统的搭建 2 基于Snort的C_S模式的IDS的设计与应用_王会霞.caj [3] Snort 笔记1 - 3种模 ...

  3. (转帖)CentOS最常用命令及快捷键整理

    原文:http://www.centoscn.com/CentOS/help/2014/0306/2493.html 最近开始学Linux,在VMware Player中安装了CentOS 6.4.为 ...

  4. Codeforces 798C. Mike and gcd problem 模拟构造 数组gcd大于1

    C. Mike and gcd problem time limit per test: 2 seconds memory limit per test: 256 megabytes input: s ...

  5. SystemTap 工作原理

    <systemtap原理及使用> https://www.cnblogs.com/youngerchina/p/5624588.html 这篇帖子前边系统介绍了systemtap的工作原理 ...

  6. 设计师别浪费时间啦,快来试试这款Sketch标注插件吧

    随着移动互联网的快速发展,用户的需求也在不断地增大,这对产品经理还有设计师的考验是越来越大.市场环境的变化让我们深信为快不破,但是一个产品的产出需要各个环节的紧密配合,但往往在产品输出过程中,由于分工 ...

  7. Android中关于使用空格对齐文字

    前言:今日编写新项目UI时,突然遇到文本有长有短无法对齐的问题(汗,以前竟从未遇到也从未考虑过这小小的问题),在资源文件中尝试Tab键.space空格键,发现效果都不能很好的实现,无奈只得请求度娘的协 ...

  8. Zxing2.1扫描取景框变形问题解决

    修改竖屏扫描的贴子,2.0之前的都很适用.可是到了2.1,有些贴子的做法可以将扫描框改为竖屏,但是取景框里扫描到的东西是变形的(扁的),本人仔细研究一番,终于解决了这个问题,下面贴出解决办法: 1.修 ...

  9. 内存溢出和内存泄漏的区别(ZZ)

      内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出 ...

  10. Linux运维之docker虚拟化部署nginx

    一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...