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

#include "stdio.h"
#include "stdlib.h"
#include "string.h" char * getstring1()
{
char *p1 = "abcde";
return p1;
} char * getstring2()
{
char *p2 = "abcde";
return p2;
} char * getstring3()
{
char buf[];
strcpy(buf, "abcde");
return buf;
} void main()
{
int i= ; //指针指向谁就把谁的地址赋给指针变量。
char *p1 = getstring1();
char *p2 = getstring2();
char ******* p3 = NULL; //p3 是个变量
// printf("p1:%s\n", p1);
// printf("p2:%s\n", p2);
//
// printf("p1:%d\n", p1);
// printf("p2:%d\n", p2); printf("p4:%s\n", p4); //指针变量和它所执行的内存空间变量是两个不同的概念
strcmp(p1, p2); system("pause");
}

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

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
//看见一级指针,要去分辨指针的输入输出特性
//指针的输入特性:在主调函数里面分配内存,在被调用函数里面使用
//指针的输出特性:在被调用函数里面分配内存,主要是把运算结果甩出来
int getLen3(int *p /*in out*/)
{
//*(NULL) = 40;
//*(0) = 40;
*p = ; //间接赋值 如果p是a的地址,那么就间接的修改a的值 //*p形参,去间接的修改实参的值
}
void main()
{
int a = ; //定义了一个变量(实参)//a看成0级指针
int * p = NULL; ////定义了一个变量(形参)//1级指针
a = ; //直接修改a的值
printf("a:%d \n", a);
//p = &a; //a的地址赋给p //把一个变量去地址传给另外一个变量 //实参取地址传给形参
getLen3(p);
getLen3(NULL);
printf("a:%d \n", a);
system("pause");
}
//*(NULL) = 40;
//*(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. mvc中webapi添加后没法访问 解决办法

    原因:原先项目中没有webapi,后来添加的. 然后就没法正常访问,百度了下发现是 App_Start/WebApiConfig.cs中路由配置多了个api 而且没有加{action}, 然后修改成: ...

  2. 函数的有用信息,装饰器 day12

    一 函数的有用信息 本函数的功能:绘图功能,实时接收数据并绘图.:return: 绘图需要的数据,返回给前端某标签 def f1(): ''' 本函数的功能:绘图功能,实时接收数据并绘图. :retu ...

  3. 自己在完第一遍STL和Directx 9.0 游戏开发编程基础书后的体会

    如果一本书看一遍就能看懂,说明书对自己相对容易,没有必要在去看第二遍,但是对于大多数书籍,都有自己陌生的知识,看完一遍无法理解的地方,说明就是自己知识点最薄弱的,最需要去理解的地方,一旦自己理解了这些 ...

  4. php伪静态与重定向

    什么是伪静态 伪静态是相对于真静态来讲的,伪静态只是改变了URL格式,实际还是动态页面,有真静态一样的SEO,真静态访问一个静态页面,服务器(apache,nginx)直接读取磁盘静态文件,伪静态是动 ...

  5. 右手坐标系下LookAt视图矩阵的推导

    基本知识 右手坐标系 右手手掌弯曲,手指方向由正X轴指向正Y轴,如果这时Z轴正方向与大拇指方向保持一致,坐标系为右手坐标系,否则为左手坐标系. 向量叉乘的方向 向量(1,0,0)与向量(0,1,0)叉 ...

  6. Tomcat假死的原因及解决方案

    服务器配置:linux+tomcat 现象:Linux服务器没有崩,有浏览器中访问页面,出现无法访问的情况,没有报4xx或5xx错误(假死),并且重启tomcat后,恢复正常. 原因:tomcat默认 ...

  7. Can't find bundle for base name test.properties, locale zh_CN

    这个问题花了我好长时间,网上搜了一个答案:http://verran.iteye.com/blog/44357 是将properties文件放在新建的文件夹下,如config,然后将config加入到 ...

  8. C语言学习第一天~Eclipse MinGW环境搭建

    一.环境准备 windows 二.Windows环境下gcc编译器 1.MinGW介绍         MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist ...

  9. 嵌入式操作系统VxWorks中网络协议存储池原理及实现

    嵌入式操作系统VxWorks中网络协议存储池原理及实现 周卫东 蔺妍 刘利强 (哈尔滨工程大学自动化学院,黑龙江 哈尔滨,150001) 摘  要  本文讨论了网络协议存储池的基本原理和在嵌入式操作系 ...

  10. sql创建备份表和复制数据到备份表

    1.复制表结构及数据到新表CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable; ...