`
beckshanling
  • 浏览: 255977 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论
文章列表
一 概括 指针和引用,在C++的软件开发中非常常见,如果能恰当的使用它们能够极大的提高整个软件的效率,但是很多的C++学习者对它们的各种使用情况并不 是都了解,这就导致了实际的软件开发中经常会内存泄漏,异常抛出,程序崩溃等问题。对于C和C++的初学者,那更是被它们搞的迷迷糊糊。本篇作为[深入 C++]系列的第一节,我们就带领大家把指针和引用这个基本功练好。 二 指针 指针,指针的定义是什么呢?好像要想给个直接的定义还是很难的哦,所以我们这里用它的语法结合图来认识它。 int i = 10;int *p = NULL;p = &i;int j = *p; int **pP = ...

指针3

    博客分类:
  • C++
从格式上看倒是与通过指针访问结构成员的不正规方法的格式一样。     所有的C/C++编译器在排列数组的单元时,总是把各个数组单元存放在连续的存储区里,单元和单元之间没有空隙。但在存放结构对象的各个成员时,在某 种编译环境下,可能会需要字对齐或双字对齐或者是别的什么对齐,需要在相邻两个成员之间加若干个 "填充字节 ",这就导致各个成员之间可能会有若干个字节的空隙。     所以,在例十二中,即使*pstr访问到了结构对象ss的第一个成员变量a,也不能保证*(pstr+1)就一定能访问到结构成员b。因为成员a和成 员b之间可能会有若干填充字节,说不定*(pstr ...

指针3

    博客分类:
  • C++
如果上例中,ptr是被减去5,那么处理过程大同小异,只不过ptr的值是被减去5乘sizeof(int),新的ptr指向的地址将比原来的ptr所指向的地址向低地址方向移动了20个字节。     总结一下,一个指针ptrold加上一个整数n后,结果是 ...

指针2

    博客分类:
  • C++
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。   要搞清一个指针需要搞清指针的四方面的内容:指针的类型 ,指针所指向的类型 ,指针的值或者叫指针所指向的内存区 ,还有指针本身所占据的内存区 。让我们分别说明。     先声明几个指针放着做例子:     例一:     (1)int*ptr;     (2)char*ptr;     (3)int**ptr;     (4)int(*ptr)[3];     (5)int*(*ptr)[4];        指针的类型   从语法的角度看 ...

指针1

    博客分类:
  • C++
指针学习不好关键是概念不清造成的,说的简单点就是书没有认真看,指针的学习犹如人在学习饶口令不多看多学多练是不行的,下面是两个很经典的例子, 很多书上都有,对于学习的重点在于理解*x和x的理解,他们并不相同,*x所表示的其实就是变量a本身,x表示的是变量a在内存中的地址 ,如果想明白可以 输出观察cout<<*x"|"x;,当定义了int *x;后对x=&a的理解的问题。仔细阅读和联系下面的两个例子我想指针问题就不是难点了! #include <stdio.h>    main()  {  int  a,b ...

内联函数和宏

    博客分类:
  • C++
C++中函数前面加关键字 inline ,表示该函数是内敛函数。 inline int Fun(int x) { return ((x > 5) && (x < 10)) ? x : 0; } 注意此时头文件要用名字空间形式 #include <iostream> using namespace std; 内敛函数的功能和宏定义(#define )差不多,即在编译阶段进行替换,减少运行时间,提高运行效率。区别是宏定义没有语法检查,内敛函数有语法检查,更不会出错! 宏展开只是简单的文本替换,有表达 ...
第一个例子: char* ss = "0123456789"; sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针 sizeof(*ss) 结果 1 ===》*ss是第一个字符 char ss[] = "0123456789"; sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1 sizeof(*ss) 结果 1 ===》*ss是第一个字符 char ss[100] = "0123456789"; sizeof(ss) 结果是100 ===》s ...
      根本的一点,就是#define定义的其实是一个常数的名字,就是说你可以把这个名字等价于常数使用,在编译时会被编译器替换为该常数。之所以这么做,仅仅是为了提高可读性,但是安全性不能得到保证。     出于安全性的考虑,c++引入了const定义。当然这仅仅是const的功能之一。使用const,你可以定义一个不能修改其值的变量,也就是可以作为 一个常量来使用了。当然,这个量与100,'a'等还是有区别的。区别就在于这个量有自己的内存地址,是被分配了空间的。     总的说来,#define   没有给名字分配空间,仅仅是给一个常数起了一个名字。而const定义了一个其值不 ...

预处理指令

    博客分类:
  • C++
1. #define     首先请看以下程序:         #include < stdio.h>         #define PERCENT 0.1         int main(void)         {             int income = 4000;             printf("%.2f", PERCENT * income);             return 0;         } 这个程序输出 400.00 。这是因为 #define PERCENT 0.1 定义了 ...
main主函数执行完毕后,是否可能再执行一段代码??5 C  x$ v- G9 A# K5 S2 y* I" M 书上说使用atexit函数注册一个函数.有一段代码:, R* v. @4 {% L$ ^ #include <iostream.h>1 |) s$ f/ _8 D! d( h/ K1 _ #include <stdlib.h>. A$ E. ?% g5 B #include<stdio.h>5 T+ M4 e! h# j/ l int atexit(void (*function)(void));3 x; F2 Y. ...

c基础

    博客分类:
  • C++
1.怎么不用中间变量直接实现 数值交换? 假设a b 不等 a = a^b b = b^a a = a^b 首先肯定异或是满足交换律的。 由于a=a^b,这里的a有两层意思,所以我用c来表示a^b的值。而出现的a,都表示没有发生改变前的。 a = a^b  // 这个相当于a=c。这在我的约定下没什么意义,只是表示a舍弃了a的值。而用于存c的值。 b = b^a  // 这在我的约定下,相当于b=b^c,将c展开,有b=b^a^b=b^b^a(这交换律)用x^x=0的公式,立刻有b=0^a,再由公式二,有b=a。至此,b舍弃了b的值,用于存a的值了。 a = a^b  // ...

螺旋队列

    博客分类:
  • C++
/* 螺旋队列   设1的坐标是(0,0),的方向向右为正,y方向向下为正, 例如,7的坐标为(-1,-1),2的坐标为(0,1)。   编程实现输入任意一点坐标(x,y),输出所对应的数字。      43 44 45 46 47 48 49      42 21 22 23 ...
在网页文件中调用CSS文件      CSS作为效率高、灵活性强而被广泛地应用于网页制作中。难得的是,CSS既可以以各种方式嵌入HTML文件中,也可以以文件的形式独立存在被而不同的HTML文件随时调用。本文将讨论CSS文件如何编写 ...
站点1:http://www.w3school.com.cn/h.asp 站点2:http://www.itsway.net/js/jsindex.aspx
Facade 外 观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合 面临很多变化的挑战。在这里我想举一个例子:比如,现在有一辆汽车,我们(客户程序)要启动它,那我们就要发动引擎(子系统 1 ),使四个车轮(子系统 2 )转动。但是实际中我们并不需要用手推动车轮使其转动,我们踩下油门,此时汽车再根据一些其他的操作使车轮转动。油门就好比系统给我们留下的接口,不论汽车是以何种方式转动车轮,车轮变化成什么牌子的,我们要开走汽车所要做的还是踩下油门。 GoF 《设计模式》中说道:为子系 ...
Global site tag (gtag.js) - Google Analytics