C++指针二(易错模型)
规则一: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++指针二(易错模型)的更多相关文章
- C语言指针的易错点
1.内存泄漏:申请的堆内存没有释放. 2.内存污染:前面非法操作使用内存(没有报错),后面写着写着就出错.如下代码: 当结构体中只有划线部分代码时,在编译器中编写不会报错,但此时已经造成非法操作内存, ...
- C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间
1 作业讲解 指针间接操作的三个必要条件 两个变量 其中一个是指针 建立关联:用一个指针指向另一个地址 * 简述sizeof和strlen的区别 strlen求字符串长度,字符数组到’\0’就结束 s ...
- 细节!重点!易错点!--面试java基础篇(二)
今天来给大家分享一下java的重点易错点第二部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.字符串创建与存储机制:当创建一个字符串时,首先会在常量池中查找是否已经有相同的字符串被定义,其判断 ...
- C++二级指针第二种内存模型(二维数组)
C++二级指针第二种内存模型(二维数组) 二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”. 定义 类型说明符 数组名[常量表达式][常量表达式] 例如: float a[3][4 ...
- *C语言有关指针的变量声明中的几个易错点
转至:http://my.oschina.net/ypimgt/blog/108265 Technorati 标签: 指针, typedef, const, define 我们都知道,至少听说过 ...
- C语言指针与数组的定义与声明易错分析
部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告 ...
- 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)
本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...
- JavaGuide易错点总结
基础知识易错点 1. object.equals("str") 容易报空指针异常,应使用"str".equals(object); 还可以使用JDK7引入的工具 ...
- 细节!重点!易错点!--面试java基础篇(一)
今天来给大家分享一下java的重点易错点部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.java中的main方法是静态方法,即方法中的代码是存储在静态存储区的. 2.任何静态代码块都会在ma ...
随机推荐
- Numpy copy & deep copy
1. '='的赋值方式会带有关联性 >>> import numpy as np >>> a = np.arange(4) >>> b = a & ...
- snort帮助文档
[1] CentOS6.6下基于snort+barnyard2+base的入侵检测系统的搭建 2 基于Snort的C_S模式的IDS的设计与应用_王会霞.caj [3] Snort 笔记1 - 3种模 ...
- (转帖)CentOS最常用命令及快捷键整理
原文:http://www.centoscn.com/CentOS/help/2014/0306/2493.html 最近开始学Linux,在VMware Player中安装了CentOS 6.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 ...
- SystemTap 工作原理
<systemtap原理及使用> https://www.cnblogs.com/youngerchina/p/5624588.html 这篇帖子前边系统介绍了systemtap的工作原理 ...
- 设计师别浪费时间啦,快来试试这款Sketch标注插件吧
随着移动互联网的快速发展,用户的需求也在不断地增大,这对产品经理还有设计师的考验是越来越大.市场环境的变化让我们深信为快不破,但是一个产品的产出需要各个环节的紧密配合,但往往在产品输出过程中,由于分工 ...
- Android中关于使用空格对齐文字
前言:今日编写新项目UI时,突然遇到文本有长有短无法对齐的问题(汗,以前竟从未遇到也从未考虑过这小小的问题),在资源文件中尝试Tab键.space空格键,发现效果都不能很好的实现,无奈只得请求度娘的协 ...
- Zxing2.1扫描取景框变形问题解决
修改竖屏扫描的贴子,2.0之前的都很适用.可是到了2.1,有些贴子的做法可以将扫描框改为竖屏,但是取景框里扫描到的东西是变形的(扁的),本人仔细研究一番,终于解决了这个问题,下面贴出解决办法: 1.修 ...
- 内存溢出和内存泄漏的区别(ZZ)
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出 ...
- Linux运维之docker虚拟化部署nginx
一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...