-
指向变量的常指针与指向常变量的指针变量的区别
2017-10-15 16:09:47一 指向变量的常指针 形式: 类型名 * const 指针变量名 将指针变量声明为const型,这样指针变量始终保持为初值,不能改变,即其指向不能改变 例 #include #include int main() { char cBuff1[100] = "1234...一 指向变量的常指针
形式: 类型名 * const 指针变量名
将指针变量声明为const型,这样指针变量始终保持为初值,不能改变,即其指向不能改变
例
常指针pcPt已经指向了cBuff1,就不能再指向cBuff2了。#include <stdio.h> #include <string.h> int main() { char cBuff1[100] = "1234"; char cBuff2[100] = "5678"; char * const pcPt = cBuff1;//合法 //pcPt = cBuff2; // 非法 printf("%s\n", pcPt); return 0; }
注意:虽然常指针只能始终指向同一个变量,但可以改变其所指向变量的值。
例:
#include <stdio.h> #include <string.h> int main() { char cBuff1[100] = "1234"; char cBuff2[100] = "5678"; char * const pcPt = cBuff1;//合法 //pcPt = cBuff2; // 非法 printf("%s\n", pcPt); pcPt[0] = '3'; printf("%s\n", pcPt); printf("%s\n", cBuff1); return 0; }
运行结果:可以看出pcPt和cBuff1的值被改变了。
通常用常指针作为函数的形参,目的是不允许在函数执行过程中改变指针变量的值,使其始终指向原来的对象。
例:
#include <stdio.h> #include <string.h> int func(char * const _pcPt) { char cBuff3[100] = "9876"; _pcPt = cBuff3; //非法 printf("%s\n", _pcPt); return 0; } int main() { char cBuff1[100] = "1234"; char cBuff2[100] = "5678"; char * const pcPt = cBuff1;//合法 //pcPt = cBuff2; // 非法 printf("%s\n", pcPt); func(cBuff1); return 0; }
此程序是编译不过的,是因为在func函数中,_pcPt改变了指向,所以导致出错;二 指向常变量的指针变量
形式:const 类型名 *指针变量名;
表示指针变量指向的变量是常变量,不能通过指针变量来改变其值。
(1)如果一个变量已被声明为常变量,只能用指向常变量的指针变量指向它,而不能用一般的(指向非const型变量的)指针变量去指向它。
(2) 指向常变量的指针变量除了可以指向常变量,还可以指向未被声明为const的变量,此时不能通过此指针变量改变该变量的值。#include <stdio.h> #include <string.h> int main() { const char cBuff1[100] = "1234"; char cBuff2[100] = "5678"; const char *pcPt; pcPt = cBuff1; printf("%s\n", pcPt); pcPt = cBuff2; printf("%s\n", pcPt); cBuff2[0] = '3'; printf("%s\n", pcPt); printf("%s\n", cBuff2); //pcPt[0] = '3'; //非法,不能通过指针变量改变变量的值 //char *pcPt2 = cBuff1; //非法,不能用非const指针变量去指向常变量 return 0; }
如果不是通过指针变量访问,则变量的值是可以改变的。
代码中的pcPt = cBuff2;
cBuff2[0] = '3';
说明了此原理。
(3) 如果函数的形参是指向普通(非const)变量的指针变量,则实参只能用指向普通(非const)变量的指针,而不能用指向const变量的指针。
用指针变量作形参和实参的对应关系
形参 实参 是否合法 改变指针所指向的变量的值 指向非const型变量的指针 非const变量的地址 合法 可以 指向非const型变量的指针 const变量的地址 非法 / 指向const型变量的指针 const变量的地址 合法 不可以 指向const型变量的指针 非const变量的地址 合法 不可以 -
符号常量与常变量的区别
2015-09-09 15:44:00符号常量与常变量的区别 定义符号常量:#define PI 3.1415926 //注意后面没有分号 定义常变量 :const float PI=3.1415926; 区别: 常变量:变量的特征是存在一个以变量名命名的存储单元,在一般...符号常量与常变量的区别定义符号常量:#define PI 3.1415926 //注意后面没有分号定义常变量 :const float PI=3.1415926;区别:常变量:变量的特征是存在一个以变量名命名的存储单元,在一般情况下,存储单元中的内容是可以变化的。而对于常变量,在变量的基础上加了一个限定:存储单元中的内容不允许变化,仍然是有存储单元的。符号常量:是使用一个字符串代替程序中出现的一个标识符,是编译时把所有的符号常量都替换成制定的字符串,在内存中也不存在一符号常量命名的存储单元。在其作用域内其值不能改变和赋值。转载于:https://www.cnblogs.com/liweilijie/p/4794934.html
-
指向对象的常指针变量与指向常对象的指针变量区别
2017-01-13 20:02:241 指向对象的常指针变量与指向常对象的指针变量区别 Time * const p; //指向对象的常指针变量 p的值(p的指向)不能修改 const Time *p; //指向常对象的指针变量,p指向的类对象的值不能通过p来修改 1.1 ...1 指向对象的常指针变量与指向常对象的指针变量区别
Time * const p; //指向对象的常指针变量 p的值(p的指向)不能修改
const Time *p; //指向常对象的指针变量,p指向的类对象的值不能通过p来修改
1.1 指向对象的常指针变量
将指针变量声明为const型,这样指针变量始终保持初值,不能改变,即其所指向不变。
Timet1(10,12,15),t2;
Time *const ptr1; //const位置在指针变量名前面,指定ptr1是常指针变量
ptr1 =&t1; //ptr1指向对象t1,此后不能再改变指向
ptr1 =&t2; //错误,ptr1不能改变指向
注意:指向对象的常指针变量的值不能改变,即始终指向同一个对象,但可以改变其所指向对象(如t1)的值。
什么时候需要用指向对象的常指针呢?如果想将一个指针变量固定地址与一个对象相联系(即该指针变量始终指向一个对象),可以将它指定为const型指针变量。这样可以防止误操作,增加安全性。
往往用常指针作为函数的形参,目的是不允许在函数执行过程中改变指针变量的值,使其始终指向原来的对象。
1.2 指向常对象的指针变量
指向常对象的指针最常用于函数的形参,目的是在保护形参指针所指向的对象,使它在执行过程中不被修改。
……
int main()
{
void fun(const Time *);//函数声明,形参是指向常对象的指针变量
Time t1(10,13,56);
fun(&t1); //实参是对象t1的地址
return 0;
}
void fun(const Time *p) //定义fun函数
{
p->hour = 18; //错误
cout<<p->hour<<endl;
}
-
符号常量和变量有什么区别_变量与常变量
2020-11-22 13:36:52它用来存放数据,也就是存救变量的值。在程序运行期间,变量的值是可以改变的。变量必须先定义,后使用①。在定义时指定该变量的名字和类型。一个变量应该有一个名字,以便被引用。请注意区分变量名和变量值这两个...1.变量
变量代表一个有名字的、具有特定属性的一个存储单元。它用来存放数据,也就是存救变量的值。在程序运行期间,变量的值是可以改变的。
变量必须先定义,后使用①。在定义时指定该变量的名字和类型。一个变量应该有一个名字,以便被引用。请注意区分变量名和变量值这两个不同的概念,图3.3中a是变量名,3是变量。的值,即存放在变量a的内存单元中的数据,变量名实际上是以一个名字代表的一个存储地址,在对程序编译连接时由编译系统给每一个变量名分配应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。
2.常变量
C99允许使用常变量,方法是在定义变量时,前面加一个关健字cont,如:const int a3;
定义:为一个整型变量,指定其值为3,雨且在安量存在期间其值不能改变。
常变量与常量的异同是:常变量具有变量的基本属性:有类型,占存储单元,只是不允 许改变其值。可以说,常变量是有名字的不变量,面常量是没有名字的不变量。有名字就便于在程序中被引用。
请思考:常变量与符号常量有什么不同?如,
s definr Pi 3.1415926
/定义符号常量
const float pi-3,1415926
/定义常变量
符号常量和常变量pi都代表3.1415925.在程序中都能使用。但二者性质不同:定义符 号常量用#define指令,它是预编译指令,它只是用符号常量代表一个字符申,在预编译时仅进行字符替换,在预编译后,符号常量就不存在了(全置换成3.1415926了),对符号常量的名字是不分配存储单元的。而常变量要占用存储单元,有变量值,只是该值不改变而已。 从使用的角度看,常变量具有符号常量的优点,而且使用更方便,有了常变量以后,可以不必多用符号常量。 誓说明:有些编译系统证未实现C99的功能,因此不能使用常变量。
-
常变量和符号变量的区别
2017-11-27 14:04:00常变量与符号变量的理解: #define Pi 3.1415926 //定义符号常量 const float pi = 3.1415926 //定义常变量 定义符号常量用#define指令,它是预编译指令它只是用符号代表一个字符串,在预编译时仅是进行字符的替换,... -
c语言符号常量与常变量的区别?
2015-11-21 19:43:00<blockquote>定义符号常量:#define PI 3.1415926 //注意后面没有分号 定义常变量 :const float PI=3.1415926;</blockquote>...常变量:变量的特征是存在一个以变量名命名的存储... -
C 语言中符号常量与常变量的区别
2013-10-21 13:33:42符号常量 pi 和常变量 PI 都代表3.1415926,在程序中都能使用,只是二者的性质有所差别,定义符号常量使用#define 指令,是预编译指令,只是使用一个符号常量代表一个字符串,在预编译是仅仅进行字符替换,子啊预... -
宏常量与常变量
2020-06-05 08:10:42宏常量 形式: #define pi 3.1415926 优点: 含义清楚、见名知意;修改方便,一改全改。 常变量 ...3.常变量与直接常量的异同:常变量有变量的基本属性,有数据类型,会...4.常变量与宏常量的区别:常变量有数据类型,而 -
C/C++文字常量与常变量的概念与区别 分类: C/C++ ...
2015-06-10 22:56:00在C/C++编程时,经常遇到以下几个概念:常量、文字常量、符号常量、字面常量、常变量、字符串常量和字符常量,网上博客资料也是千篇千律,不尽相同,弄得大家云里雾里。本文将尝试为大家捋清楚以上易混淆概念的定义... -
属性与变量的区别
2020-08-14 21:52:12属性是变量的附加解释,某变量可以称作属性,java,c#等面向对象语言环境使用较多。 例如面向对象编程写一个学生类,里面有name,age等变量;我们就可以称name是学生类名字属性age是学生类年龄属性。 也可以把学生类... -
C语言笔记 常变量 符号常量 字符数组与字符串 字符串处理函数 strlen与sizeof区别
2020-10-24 18:37:09C99允许常变量,如const int a =3,常变量具有变量属性:有类型,占存储单元,只是不允许改变其值,即有名字的不变量,而常量是没有名字的不变量 符号常量用#define指令,在预编译是仅进行字符替换,预编译后,符号... -
不同类型的常,变量在JVM中的存储位置和equals与==的区别
2021-01-20 16:52:11equals和==的区别 1.简单了解JVM中内存分配 1)JVM内存结构 JVM的运行时数据区主要包括堆,栈,方法区和程序计数器,其中栈分为虚拟机栈和本地方法栈。 A)程序计数器: 简单来说程序计数器是当前线程所执行字节码... -
java中常量和变量的区别_乐字节Java变量与数据结构之二:Java常量与变量
2020-12-02 07:07:11常量与变量(必须牢牢掌握)1、常量1)、定义在程序执行的过程中,其值不发生改变的量。2)、分类A:字面值常量B:自定义常量(后面讲)3)、字面值常量A:字符串常量 "hello"B:整数常量 12,23C:小数常量 12.345D:字符常... -
C/C++文字常量与常变量
2015-06-10 22:56:58在C/C++编程时,经常遇到以下几个概念:常量、文字常量、符号常量、字面常量、常变量、字符串常量和字符常量,网上博客资料也是千篇千律,不尽相同,弄得大家云里雾里。本文将尝试为大家捋清楚以上易混淆概念的定义... -
reg类型变量综合电路_verilog语言中wire型变量和reg 型变量的区别
2020-12-23 11:29:40标签:wire与reg类型的区别:wire型数据常用来表示以assign关键字指定的组合逻辑信号。模块的输入输出端口类型都默认为wire型。默认初始值是z。reg型表示的寄存器类型。always模块内被赋值的信号,必须定义为reg型,... -
C++之常对象、常成员变量与常成员函数详解
2017-02-28 22:08:37常对象说明:常对象是指对象的数据成员的值在对象被调用时不能被改变。常对象必须进行初始化,且不能被更新。不能通过常对象调用普通成员函数,但是可以通过普通对象调用常成员函数。常对象只能调用常成员函数。常... -
对python变量的理解_改变对变量的理解,详解python中 is 与 == 的区别
2021-01-12 00:46:14先看一个初学python阶段最常遇到且最易混用问题:对NONE判断语句的使用:list_a = []list_a == NONElist_a is NONE# 这里的确都能正确输出# 但规范的使用应该用 is NONE按照python的推荐,这里我们当然是应该用 is ... -
tstatic静态变量与const常量区别总结
2018-10-30 17:29:17***静态变量*** static 为了节省空间,实现数据的共享,保证数据的一致性。 ***常量成员*** const 为了保证无法修改 有些数据需要被共享,但是也不能被修改,用此定义为常量(类似于#define) 只能在初始化的时候... -
Windows 系统常变量 赋值的一个规则 位与 加运算 异同
2011-01-21 11:34:00经常会有学弟问我,在API编程的时候,很多时候windows.h里或者其他库里的常数系统变量的“ 位或 |”运算和 “算术运算 +”是没有区别的。而我们知道 | 和+还是有区别的。比如 MessageBox(NULL,"``","caption",MB_OK+... -
verilog语言中wire型变量和reg 型变量的区别
2018-08-28 16:23:41参考:... ... wire与reg类型的区别: wire型数据常用来表示以assign关键字指定的组合逻辑信号。模块的输入输出端口类型都默认为wire型。默认初始值是z。 reg型表示的... -
关于define与defined的区别!判断文件函数变量是否被定义
2019-08-27 19:00:171.define用来定义一个常量,常量也是全局范围的...define("path","root/www/web")define为常root/www/web 为常量的值 2.defined用来检测常量有没有被定义,若常量存在,则返回true,否则返回 false如: [html]vie...