在C/C++中关键字const用来定义一个只读的变量或者对象,有如下优点 :
(1)便于类型检查,如函数的函数 fun(constint a)a的值不允许变,这样便于保护实参; (2)功能类似与宏定义,方便参数的修改和调整。如constint max = 100;
(3)节省空间,如果再定义a = max,b=max。。。就不用在为max分配空间了,而用宏定义的话就一直进行宏替换并为变量分配空间;
(4)为函数重载提供参考
而C/C++中常把指针和常量混合起来使用,其最大的用途就是作为函数的形式参数,保证实参在被调函数中的不可改变的特性。
一、
首先一定要明白哪种定义方式是常量指针,哪种是指针常量,这里可以记住三句话加深记忆:(1)* (指针)和const(常量)谁在前先读谁;
(2)*象征着地址,const象征着内容;
(3)谁在前面谁就不允许改变。
举例说明:
常量指针p1:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。
p1 = &a是正确的,但 *p1 = a是错误的。
指针常量p2:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。p2= &a是错误的,而*p2 = a 是正确的。
指针常量和指针变量的区别就是是否使用了const修饰符修饰,凡是有const修饰的指针都是指针常量,否则就是指针变量。
C++指针函数习题 一、选择题 1.以下程序的运行结果是()。 sub(int x, int y, int *z) { *z=y-x; } void main() { int a,b; sub(10,5,&a); sub(7,a,&b); cout< #include<>
文件读写 无论读写都要包含 22.infile.close(); 23.} 写: 1.ofstream outfile; 2.outfile.open("myfile.bat"); //myfile.bat是存放数据的文件名 3.if(outfile.is_open()) 4.{ 5.outfile< 彻底搞定C指针---指向指针的指针 彻底搞定C指针---指向指针的指针一.回顾指针概念: 今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧! 当我们程序如下申明变量: short int i; char a; short int * pi; 程序会在内存某地址空间上为各变量开辟空间,如下图所示。 内存地址→6 7 8 9 10 11 12 13 14 15 ------------------------------------------------------------------------------------- … | | | | | | | | | | ------------------------------------------------------------------------------------- |short int i |char a| |short int * pi| 图中所示中可看出: i 变量在内存地址5的位置,占两个字节。 a变量在内存地址7的位置,占一个字节。 pi变量在内存地址9的位置,占两个字节。(注:pi 是指针,我这里指针的宽度只有两个字节,32位系统是四个字节) 接下来如下赋值: i=50; pi=&i; 经过上在两句的赋值,变量的内存映象如下: 内存地址→6 7 8 9 10 11 12 13 14 15 -------------------------------------------------------------------------------------- … | 50 | | | 6 | | | | -------------------------------------------------------------------------------------- |short int i |char a| |short int * pi| 看到没有:短整型指针变量pi的值为6,它就是I变量的内存起始地址。所以,这时当我们对*pi进行读写操作时,其实就是对i变量的读写操作。如:*pi=5; //就是等价于I=5; 你可以回看本系列的第二篇,那里有更加详细的解说。 二.指针的地址与指向另一指针地址的指针 在上一节中,我们看到,指针变量本身与其它变量一样也是在某个内存地址中的,如pi的内存起始地址是10。同样的,我们也可能让某个指针指向这个 用名作为其他变量名地别名. ; 等价于; ()声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名地一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元.故:对引用求地址,就是对目标变量求地址.与相等. ()不能建立数组地引用.因为数组是一个由若干个元素所组成地集合,所以无法建立一个数组地别名. 引用应用 、引用作为参数 引用地一个重要作用就是作为函数地参数.以前地语言中函数参数传递是值传递,如果有大块数据作为参数传递地时候,采用地方案往往是指针,因为这样可以避免将整块数据全部压栈,可以提高程序地效率.但是现在(中)又增加了一种同样有效率地选择(在某些特殊情况下又是必须地选择),就是引用. 【例】: ( , ) 此处函数地形参, 都是引用 { ; ; ; ; } 为在程序中调用该函数,则相应地主调函数地调用点处,直接以变量作为实参进行调用即可,而不需要实参变量有任何地特殊要求.如:对应上面定义地函数,相应地主调函数可写为: ( ) { ; >>>>; 输入两变量地值 (); 直接以变量和作为实参调用函数 <<<< ' ' <<; 输出结果 } 上述程序运行时,如果输入数据并回车后,则输出结果为. 由【例】可看出: ()传递引用给函数与传递指针地效果是一样地.这时,被调函数地形参就成为原来主调函数中地实参变量或对象地一个别名来使用,所以在被调函数中对形参变量地操作就是对其相应地目标对象(在主调函数中)地操作. ()使用引用传递函数地参数,在内存中并没有产生实参地副本,它是直接对实参操作;而使用一般变量传递函数地参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量地副本;如果传递地是对象,还将调用拷贝构造函数.因此,当参数传递地数据较大时,用引用比用一般变量传递参数地效率和所占空间都好. ()使用指针作为函数地参数虽然也能达到与使用引用地效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"地形式进行运算,这很容易产生错误且程序地阅读性较差;另一方面,在主调函数地调用点处,必须用变量地地址作为实参.而引用更容易使用,更清晰. 如果既要利用引用提高程序地效率,又要保护传递给函数地数据不在函数中被改变,就应使用常引用. 、常引用 常引用声明方式:类型标识符引用名目标变量名; 用这种方式声明地引用,不能通过引用对目标变量地值进行修改,从而使引用地目标成为,达到了引用地安全性. 【例】: ; ; ; 错误 ; 正确 这不光是让代码更健壮,也有些其它方面地需要. 【例】:假设有如下函数声明: 1.char const * p ,char * const p,char const * const p的区别 常量指针、指针常量、指向常量的指针常量 例程: xiajiashan@ubuntu:~/linxun/pointer_const$ cat -n pointer.c 1 #include . 编程题 1用指向数组的指针变量输出数组的全部元素 2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出 练习题: 一判断题 1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。 2.指针的类型是它所指向的变量或对象的类型。 3.定义指针时不可以赋初值。 4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。5.指针可以加上或减去一个int型数,也可以加上一个指针。6.两个指针在任何情况下相减都是有意义的。 7.数组元素可以用下标表示,也可以用指针表示。 8.指向数组元素的指针只可指向数组的首元素。 9.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。 10.引用是一种变量,它也有值和地址值。 11.引用是某个变量的别名,引用是被绑定在被引用的变量上。 12.创建引用时要用一个同类型的变量进行初始化。 13.指针是变量,它可以有引用,而引用不能有引用。 ;. . 二单选题 1.下列关于定义一个指向double型变量的指针,正确的是()。A.int a(5);double *pd=a; B.double d(2.5),*pd=&d;C.double d(2.5),*pd=d; D.double a(2.5),pd=d;。).下列关于创建一个int型变量的引用,正确的是(2A.int a(3),&ra=a; B int . a(3),&ra=&a;ra=a;D.int a(3), C.double d(3.1);int &rd=d;.下列关于指针概念的描述中,错误的是()。3 A.指针中存放的 是某变量或对象的地址值.指针的类型是它所存放的数值的类型 B .指针是变量,它也具有一个内存地址值 C .指针的值是可以改 变的D 。.下列关于引用概念的描述中,错误的是()4 A.引 用是变量,它具有值和地址值 B.引用不可以作数组元素 C.引用是变量的别名 D.创建引用时必须进行初始化。++*p相同的是()*p=a5.已知:int a[5],;则与a[0] . B.*++p A++a[0] .C*p++ D.;. . 6.已知:int a[ ]={1,2,3,4,5},*p=a;在下列数组元素地址的表 中国古医指针点穴疗法第十九代传人张双振老师的独门降压方法视频 独门的降压方法 1.降血压的穴位就两个,第一个就是大脚趾的第一个指节和第二个指节的连接处,就是我们说的脚趾窝上,是人体上最敏感的降压反射区,只要用力点按5分钟以上就有明显的降压效果。第二个是在大脚趾的外侧(颈椎哪里),只要用力点按5分钟以上就有明显的降压效果。 2.如果在外面,不方便按脚,还可以按耳朵内侧的降压沟,如果血压高的人,按着这里就有跳的感觉,等这里不跳了,血压就降下来了。这个穴位要10-20多分钟就能见效。可以作为平时的降压保健按。力度适中就行,只要每天按上20分钟,一般坚持一周血压就能降的很好了。 3.祖传降压操金刚指保身大法:把你的手伸起来,用你的大拇指尽量的搓动你的小指、无名指、中指和食指,由小指根到小指、无名指、中指和食指指尖,再到食指、中指、无名指和小指的指根,要用力搓动,刚开始一个手都不习惯,搓动的时候不仅好酸,你转个十几圈,可能三五圈,你会觉得手出汗了,重点在手心那块儿出汗。这是为什么呢?掌心实际是心包经上的劳宫穴,劳宫穴是排解心脏内部的毒素用的。如果是在经常做降压手指操,就等于是在排解心脏内部的毒素。你可以摸摸出的汗肯定是粘粘的,它跟一般的汗是不也一样的,你会感觉是从掌心沁出来的那种汗。黏汗和一般的汗有什么区别?黏汗就是心脏里身上的毒气,所以常年坚持,对血压调节会有非常好的效果。 以上方法是中国古医指针点穴疗法第十九代传人张双振老师的独门降 压方法,效果非常神奇。 古医指针点穴疗法,就是以指代针,意气相合,意到气到,以祛其疾。也就是说用意念和自己身体内家功(也叫内含功)的功法,最后用气到达指尖,针对经络和穴位祛病。 编程题 1用指向数组的指针变量输出数组的全部元素 2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出 练习题: 一判断题 1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。 2.指针的类型是它所指向的变量或对象的类型。 3.定义指针时不可以赋初值。 4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。 5.指针可以加上或减去一个int型数,也可以加上一个指针。 6.两个指针在任何情况下相减都是有意义的。 7.数组元素可以用下标表示,也可以用指针表示。 8.指向数组元素的指针只可指向数组的首元素。 9.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。 10.引用是一种变量,它也有值和地址值。 11.引用是某个变量的别名,引用是被绑定在被引用的变量上。 12.创建引用时要用一个同类型的变量进行初始化。 13.指针是变量,它可以有引用,而引用不能有引用。 二单选题 1.下列关于定义一个指向double型变量的指针,正确的是()。 A.int a(5);double *pd=a;B.double d(2.5),*pd=&d;C.double d(2.5),*pd=d;D.double a(2.5),pd=d; 2.下列关于创建一个int型变量的引用,正确的是()。 A.int a(3),&ra=a;B.int a(3),&ra=&a; C.double d(3.1);int &rd=d;D.int a(3),ra=a; 3.下列关于指针概念的描述中,错误的是()。 A.指针中存放的是某变量或对象的地址值 B.指针的类型是它所存放的数值的类型 C.指针是变量,它也具有一个内存地址值 D.指针的值是可以改变的 4.下列关于引用概念的描述中,错误的是()。 A.引用是变量,它具有值和地址值 B.引用不可以作数组元素 C.引用是变量的别名 D.创建引用时必须进行初始化 5.已知:int a[5],*p=a;则与++*p相同的是()。 A.*++p B.a[0] C.*p++ D.++a[0] 古医指针点穴疗法 第十九代传人张双振老师的独门降压方 独门的降压方法 1.降血压的穴位就两个,第一个就是大脚趾的第一个指节和第二个指节的连接处,就是我们说的脚趾窝上,是人体上最敏感的降压反射区,只要用力点按5分钟以上就有明显的降压效果。第二个是在大脚趾的外侧(颈椎哪里),只要用力点按5分钟以上就有明显的降压效果。 2.如果在外面,不方便按脚,还可以按耳朵内侧的降压沟,如果血压高的人,按着这里就有跳的感觉,等这里不跳了,血压就降下来了。这个穴位要10-20多分钟就能见效。可以作为平时的降压保健按。力度适中就行,只要每天按上20分钟,一般坚持一周血压就能降的很好了。 3.祖传降压操金刚指保身大法:把你的手伸起来,用你的大拇指尽量的搓动你的小指、无名指、中指和食指,由小指根到小指、无名指、中指和食指指尖,再到食指、中指、无名指和小指的指根,要用力搓动,刚开始一个手都不习惯,搓动的时候不仅好酸,你转个十几圈,可能三五圈,你会觉得手出汗了,重点在手心那块儿出汗。这是为什么呢?掌心实际是心包经上的劳宫穴,劳宫穴是排解心脏内部的毒素用的。如果是在经常做降压手指操,就等于是在排解心脏内部的毒素。你可以摸摸出的汗肯定是粘粘的,它跟一般的汗是不也一样的,你会感觉是从掌心沁出来的那种汗。黏汗和一般的汗有什么区别?黏汗就是心脏里身上的毒气,所以常年坚持,对血压调节会有非常好的效果。 以上方法是中国古医指针点穴疗法第十九代传人张双振老师的独门降压方法,效果非常神奇。 古医指针点穴疗法,就是以指代针,意气相合,意到气到,以祛其疾。也就是说用意念和自己身体内家功(也叫内含功)的功法,最后用气到达指尖,针对经络和穴位祛病。 肩周炎:同点清灵穴、大包穴 法如下: 腿疼点:鹤顶穴(膝盖骨正中央))上膝眼(左右各一穴)(膝盖骨上侧中点旁开一寸)下膝眼(左右各一穴) 2变量的指针和指针变量的区别是什么。 答;一个变量的地址指出了变量的存储单元在内存中的具体位置,能对变量进行存取操作。这个变量的地址就是变量的指针。指针是一种具有特殊意义的整型数,指针不能存放在一般的整型变量中,必须存放在专门指针的变量中,这类变量就是指针变量。 3 一维数组元素的引用有哪些方式。 答;下标法、地址法、指针法 4 2维数组列地址有哪些计算方法。 答;1 根据数组元素所在的行计算出行地址,然后把行地址转换成行中首元素的地址,再根据数组元素所在的列计算数组元素的地址。 2 根据2维数组的数组元素在存储空间上按行连续存放的特点,每个数组元素的地址等于2维数组元素的首元素地址加上该数组元素相对于首元素位置的偏移量。 3把2维数组的每一行当作一个一维数组,用一维数组元素地址的计算方法计算相应的2维数组元素的地址。 第9章结构体与共用体 1 什么是链表。其中单向链表具有哪些特点。 答;链表是若干个同样类型的结构通过依次串接方式构成的一种动态数据结构。链表中的每一个结构体数据成为结点,链表可以分成单向链表和双向链表 单向链表的特点;1 链表中的结点数据可以改变的 2 结点占用的内存是动态分配内存和动态释放内存函数。 2 对单向链表的常用操作有哪些。 答;对单向链表的常用操作有建立、显示、插入,删除和查找。 3 什么是共用体。 答;共用体是一个集合体。它的各个成员的数据类型可以是不相同的,所有成员共享同一段存储空间,存储空间的大小取决存储单元最大的成员的数据类型。 4 指向结构体类型变量的指针变量引用形式有哪些。 答;有两种形式;【星号指针变量名】。成员名和指针变量名-大于号成员名。 第10章位运算及编译预处理 1 C提供的编译预处理功能有哪些。如何实现。 答;功能有三种;宏定义、文件包含和条件编译,分别用宏定义命令、文件包含命令、条件编译命令实现。 2 文件包含的基本功能是什么。 答;文件包含处理是一个源文件可以将另一个源文件的全部内容包含到本文件中来,作为本文件的一部分,这可以节省程序设计人员的重复劳动。 【3【在C语言中提供了几种什么样的位运算符。 答;-、小于小于、大于大于、 4 文件包含需要注意哪些问题 答;一个井include命令只能指定一个被包含文件,包含多个文件侧需多个井include命令;文件包含可以嵌套,即一个被包含文件中可以包含另一个被包含的文件;在井include命令中,文件名可以用双引号或尖括号括起来。 第11章文件 1 文件的结束标志有哪些。 答;每个文件都有一个结束标志。当文件的位置指针移到文件的结束标志处时,表示文件结束。如何测试文件是否结束,常有2种方法 1 ASCII码文件的结束标志用【-1】表示。指向指针的指针——彻底搞定C指针
指针变量作为函数参数
常量指针_指针常量
指针练习题
中国古医指针点穴疗法第十九代传人张双振老师的独门降压方法视频
指针练习题
张双振老师的独门点穴法
变量的指针和指针变量的区别是什么
指向函数的指针