const变量使用总结

或许还有不少人对于const修饰符理解的并不深刻,都只是停留在一个比较浅的层面上,仅仅是在读别人代码的时候看到了const修饰符的使用,自己的写代码的过中从未使用过,所以自然对于const修饰符比较陌生。

那么到底什么是const 修饰符,我们在自己编写C语言代码的过程中又该如何有效的使用const修饰符呢,现在让我们来学习下const修饰符的使用。

const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,即就是说其所修饰的对象为常量。

当你代码中想要设法阻止一个变量被改变,那么这个时候可以选择使用const关键字。

在你给一个变量加上const修饰符的同时,通常需要对它进行初始化,在之后的程序中就不能再去改变它。

可能有的人会有一个疑问,我们不是有在C中有预处理指令#define VariableNameVariableValue可以很方便地进行值替代,干嘛还要引入const修饰符呢?!这是因为预处理语句虽然可以很方便的进行值得替代,但它有个比较致命的缺点,即预处理语句仅仅只是简单值替代,缺乏类型的检测机制。

这样预处理语句就不能享受C编译器严格类型检查的好处,正是由于这样,使得它的使用存在着一系列的隐患和局限性。

在讲解const修饰符之前,我们在此首先给出const修饰符的几个典型作用:1. const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令2. 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性;3. 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

4. 可以节省空间,避免不必要的内存分配。

接下来看看具体的使用。

一、const修饰符在函数体内修饰局部变量。

constint n=5;和intconst n=5;是等价的。

我们在编程的过程中一定要清楚的知道const修饰的对象是谁,在这里修饰的是n,和int没有关系。

const要求他所修饰的对象为常量,不能被改变,同时也不能够被赋值,所以下面这样的写法是错误的。

constint n;n=0;对于上面的情况是比较容易理解的,但是当const与指针一起使用时,就容易让人感到迷惑。

例如,下面我们来看看一个p和q的声明:constint *p;intconst *q;看了上面的代码可能有人会觉得constint *p;表示的是constint类型的指针(const直接修饰int),而intconst *q;表示的是int类型的const指针(const直接修饰指针)。

实际上,在上面的声明中p和q都被声明为constint类型的指针。

而int类型的const指针应该这样声明:int * const r= &n;以上的p和q都是指向constint类型的指针,也就是说,你在以后的程序里不能改变*p的值。

而r是一个const指针,它在声明的时候被初始化指向变量n(即r=&n;)之后,r的值将不再允许被改变,但*r的值可以改变。

在此对于判断const的修饰对象给出一种常使用的方法,我们以*为界线,如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const 位于*的右侧,const就是修饰指针本身,即指针本身是常量。

还是给个代码来加深下大家的印象吧。

#includeint main(intargc, char* argv[]){intss=9;int * const r= &ss;printf("%d\n",*r);printf("%d\n",ss);*r=100;printf("%d\n",*r);printf("%d\n",ss);return 0;}运行结果如下:简单的来分析下吧,因为r指向的是ss的地址,所以修改r指向的地址单元的值的同时ss的值也随之变化。

结合上述两种const修饰的情况,我们现在应该可以完成如何声明一个指向constint类型的const指针,如下:constint * const r=&ss;这个时候我们既不能修改*r的值也不能修改r的值。

接下来看看const用于修饰常量静态字符串,例如:例如:const char* str="fdsafdsa";如果没有const的修饰,我们可能会在后面有意无意的写str[4]='x'这样的语句,这样会导致对只读内存区域的赋值,然后程序会立刻异常终止。

有了const,这个错误就能在程序被编译的时候就立即检查出来,这就是const的好处。

让逻辑错误在编译期被发现。

二、const在函数声明时修饰参数void *memmove( void* dest, const void* src, size_t count ); 这是标准库中的一个函数,在头文件#include 中声明,其功能为由src所指内存区域复制count个字节到dest所指内存区域。

用于按字节方式复制字符串(内存)。

它的第一个参数,是将字符串复制到哪里去(dst),是目的地,这段内存区域必须是可写。

它的第二个参数,是要将什么样的字符串复制出去,我们对这段内存区域只做读取,不写。

于是,我们站在这个函数自己的角度来看,src这个指针,它所指向的内存内所存储的数据在整个函数执行的过程中是不变。

于是src所指向的内容是常量。

于是就需要用const修饰。

另外需要强调的一点就是src和dest所指内存区域可以重叠,但复制后dest内容会被更改。

函数返回指向dest的指针。

例如,我们这里这样使用它。

#include#includeint main(intargc, char* argv[]){const char* str="hello";charbuf[10];memmove(buf,str,6);printf("%s\n",buf);return 0;}运行结果如下:如果我们反过来写,memmove(str,buf,6);那么编译器一定会报错。

事实是我们经常会把各种函数的参数顺序写反。

事实是编译器在此时帮了我们大忙。

如果编译器静悄悄的不报错,即在函数声明void *memmove( void* dest, const void* src, size_t count ); 处去掉const即可,那么这个程序在运行的时候一定会崩溃。

这里还要说明的一点是在函数参数声明中const一般用来声明指针而不是变量本身。

例如,上面的size_tlen,在函数实现的时候可以完全不用更改len的值,那么是否应该把len也声明为常量呢?可以,可以这么做。

我们来分析这么做有什么优劣。

如果加了const,那么对于这个函数的实现者,可以防止他在实现这个函数的时候修改不需要修改的值(len),这样很好。

但是对于这个函数的使用者,1.饰符号毫无意义,我们可以传递一个常量整数或者一个非常量整数过去,反正对方获得的只是我们传递的一个copy。

2实现。

我不需要知道你在实现这个函数的时候是否修改过len的值。

所以,const一般只用来修饰指针。

再看一个复杂的例子intexecv(const char *path, char *constargv[]);着重看后面这个,argv.它代表什么。

如果去掉const,我们可以看出char * argv[],argv是一个数组,它的每个元素都是char *类型的指针。

如果加上const.那么const修饰的是谁呢?修饰的是一个数组,argv[]意思就是说这个数组的元素是只读的。

那么数组的元素的是什么类型呢?是char *类型的指针.也就是说指针是常量,而它指向的数据不是。

于是argv[1]=NULL; //非法argv[0][0]='a'; //合法三、const作为全局变量在程序中,我们要尽可能少的使用全局变量。

因为其作用域是全局,所以程序范围内都可以修改它的值,从而导致了全局变量不能保证值的正确性,如果出现错误非常难以发现。

如果在多线程中使用全局变量,你的程序将会错的一塌糊涂。

多线程会修改另一个线程使用的全局变量的值,如果不注意,一旦出错后果不堪设想。

所以在这种情况下万不得意不要使用全局变量。

我们要尽可能多的使用const。

如果一个全局变量只在本文件中使用,那么用法和前面所说的函数局部变量没有什么区别。

如果它要在多个文件间共享,那么就牵扯到一个存储类型的问题。

有两种方式。

1.用extern例如/* pi.h */externconst double pi;/* pi.c */const double pi=3.14;然后其他需要使用pi这个变量的,包含pi.h#include pi.h或者,自己把那句声明复制一遍就好。

这样做的结果是,整个程序链接完后,所有需要使用pi这个变量的共享一个存储区域。

2.使用static,静态外部存储类/* constant.h */staticconst double pi=3.14;需要使用这个变量的*.c文件中,必须包含这个头文件。

前面的static一定不能少。

否则链接的时候会报告说该变量被多次定义。

这样做的结果是,每个包含了constant.h的*.c文件,都有一份该变量自己的copy,该变量实际上还是被定义了多次,占用了多个存储空间,不过在加了static关键字后,解决了文件间重定义的冲突。

坏处是浪费了存储空间,导致链接完后的可执行文件变大。

通常来说,对于存储空间字节的变化不是太大的情况下,不是问题。

好处是,你不用关心这个变量是在哪个文件中被初始化的。

下面再来看看一段代码:#includeint main(){constint a=12;constint *p=&a; // 这个是指向常量的指针,指针指向一个常量p++; //可以指针可以自加、自减p--; //合法intconst *q=&a; // 这个和上面constint *p=&a;是一个意思int b=12;int * const r=&b; //这个就是常量指针(常指针),不能自加、自减,并且要初始化//r++; //编译出错constint * const t=&b; //这个就是指向常量的常指针,并且要初始化,用变量初始化//t++; //编译出错p=&b; //const指针可以指向const和非const对象q=&b; //合法return 0;}。

合集下载

CC++中CONST用法总结(推荐)

CC++中CONST用法总结(推荐)

CC++中CONST⽤法总结(推荐)1、修饰常量时:const int temp1; //temp1为常量,不可变 int const temp2; //temp2为常量,不可变2、修饰指针时: 主要看const在*的前后,在前则指针指向的内容为常量,在后则指针本⾝为常量;const int *ptr; //*ptr为常量; int const *ptr; //*ptr为常量; int* const ptr; //ptr为常量; const int * const ptr; //*ptr、ptr均为常量;3、const修饰类对象时: const修饰类对象时,其对象中的任何成员都不能被修改。

const修饰的对象,该对象的任何⾮const成员函数都不能调⽤该对象,因为任何⾮const成员函数都会有修改成员变量的可能。

class TEMP{ void func1(); void func2() const; } const TEMP temp; temp.func1(); //错误; temp.func2(); //正确;4、const修饰成员变量: const修饰的成员变量不能被修改,同时只能在初始化列表中被初始化,因为常量只能被初始化,不能被赋值; 赋值是使⽤新值覆盖旧值构造函数是先为其开辟空间然后为其赋值,不是初始化;⽽初始化列表开辟空间和初始化是同时完成的,直接给与⼀个值,所以const成员变量⼀定要在初始化列表中完成。

class TEMP{ const int val; TEMP(int x)val(x){}; //只能在初始化列表中赋值; }5、const修饰类的成员函数 const成员函数表⽰该成员函数不能修改类对象中的任何⾮const成员变量。

⼀般const写在函数的后⾯,形如:void func() const; 如果某个成员函数不会修改成员变量,那么最好将其声明为const,因为const成员函数不会对数据进⾏修改,如果修改,编译器将会报错;class TEMP{ void func()const; //常成员函数,不能修改对象中的成员变量,也不能调⽤类中任何⾮const成员函数; } 对于const类对象,只能调⽤类中的const成员函数,所以const修饰成员函数的作⽤主要就是限制对const对象的使⽤。

const的五种用法

const的五种用法

const的五种用法包括:
1. const修饰变量,即常量。

这种常量在定义时,修饰符const可以用在类型说明符前,也可以用在类型说明符后。

2. const修饰指针,常用来限制指针所指向的内容不被修改。

有两种情况:const char * p或char const *p,p指向的内容(*p)不能修改;char* const p,表示p不能改变,但是p指向的内容(*p)可以改变。

3. const修饰函数,有三种情况:const修饰返回值(放在最前),表示返回的值不能修改;const修饰形参(中间位置),表示在函数体内,该形参不能修改;const修饰函数(放在最后),该形式只用于成员函数,表示函数内,成员变量不能修改。

4. const修饰对象,const对象只能调用const成员函数,不能调用普通函数。

非const对象,既可以调用普通成员函数,也可以调用const成员函数。

5. 用来声明常类型,常类型的变量或对象的值是不能被更新的。

定义或说明常类型时必须进行初始化。

以上就是const的五种用法,在使用时需要根据实际需求进行选择。

C语言的const使用方法

C语言的const使用方法

C语言的const使用方法C语言的const使用方法C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。

以下是店铺为大家搜索整理的C 语言的const使用方法,希望能给大家带来帮助!const是一个C语言的关键字,它限定一个变量不允许被改变。

使用const在一定程度上可以提高程序的安全性和可靠性。

const的使用是c语言中一个比较微妙的地方,请看下面几个问题。

问题:const变量和常量为什么下面的例子在使用一个const变量来初始化数组,ANSI C 的编译器会报告一个错误呢?const int n = 5;int a[n];答案与分析:1)这个问题讨论的是“常量”与“只读变量”的区别。

常量肯定是只读的,例如5,“abc”,等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。

而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。

C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。

上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。

而ANSI C规定数组定义时长度必须是“常量”,“只读变量”也是不可以的。

2) 注意:在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而const int n,n只是一个变量(常量 != 不可变的变量,但在标准C++中,这样定义的是一个常量,这种写法是对的),实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是ANSI C对数组的规定限制了它。

3) 那么,在ANSI C 语言中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。

问题:const变量和 const 限定的内容下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢?typedef char * pStr;char string[4] = "abc";const char *p1 = string;const pStr p2 = string;p1++;p2++;答案与分析:问题出在p2++上。

const在python的用法_概述及解释说明

const在python的用法_概述及解释说明

const在python的用法概述及解释说明1. 引言1.1 概述本文将介绍在Python中const的用法,并对其进行解释和说明。

const是"constant"的缩写,表示常量,在程序中被定义后不可更改的值。

我们将讨论const在Python中的作用、与变量的区别以及在实际应用中的注意事项。

1.2 文章结构本文分为五个部分:引言、const在python的用法、const在python中的实现方式、const的使用注意事项以及const在实际应用中的例子。

首先,我们会介绍整篇文章所涵盖的内容,然后详细探讨const在Python中的使用方法和其作用。

接下来,我们将阐述常见的三种实现方式,并指出它们之间的异同。

随后,我们会提醒读者在使用const时需要特别注意的一些事项。

最后,我们会给出一些实际应用案例,以便读者更好地理解const在实践中如何运用。

1.3 目的本文旨在帮助读者了解并熟悉常量(const)在Python编程语言中所扮演的角色以及其正确使用方法。

通过深入剖析其概念和实现方式,读者能够更好地理解如何有效地利用常量来提高代码质量和可维护性。

此外,我们将通过实际应用案例的分享,为读者提供更多实践经验和灵感。

希望本文能够为读者提供有益的信息,并在Python编程中正确合理地使用常量这一工具。

2. const在python的用法2.1 什么是const在Python中,const通常指代常量,即一旦定义后就不可更改的值。

它与变量的区别在于它的值是固定的,并且不能被重新赋值或修改。

2.2 const的作用常量的作用是为程序中确定不变的数值或对象提供一个易于识别和维护的标识符。

通过使用常量,我们可以在代码中使用有意义的名称来引用这些数值或对象,而无需记住其具体的数值或属性。

2.3 const与变量的区别与变量不同,常量具有以下几个特点:- 常量只能在定义时进行赋值,在之后不能再被修改。

c语言 const的用法

c语言 const的用法

C语言中的const一直是C语言初学者心中的痛,这是因为const在不同位置有不同作用,在不同情景有不同角色。

这让初学者摸不清头脑。

今天,和大家一起研究一下const,让它的每个角色都“深入人心”!====================================================================== ========================情景一:最简单的const用法#include<stdio.h>int main(){int const a;a=5;printf("a=%d\n",a);return 0;}如果编译这个c文件,就会报错:1071.c: In function ‘main’:1071.c:5: error: assignment of read-only variable ‘a’显而易见,这是const在搞鬼,因为声明了const的变量是不能修改的!如果将源代码修改为如下这样,就没有问题了!#include<stdio.h>int main(){int const a=5;printf("a=%d\n",a);return 0;}总结:const声明的变量必须要进行初始化赋值,如果错过这个机会,以后再想给const的变量赋值,可就没门了!切记~PS:int const和const int是一回事,“颠倒写”都是可以的。

以后遇到了别犯晕,呵呵。

但是,还是要留个心眼,当const和指针搀和到一起时,这个“颠倒写”的规律可未必成立。

====================================================================== ========================情景二:发明const为了什么?在const诞生之前,开发者一直使用#define V AR 100来定义一些有特殊用途的类常量,不过这样定义是存在一些劣势的。

const变量

const变量

1. const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。

它的含义是:const修饰的类型为TYPE的变量value是不可变的。

对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变。

例如:const int nValue;//nValue是constint const nValue;// nValue是const但是对于指针类型的TYPE,不同的写法会有不同情况,例如:A. const char *pContent;B. char * const pContent;C. char const *pContent;D. const char* const pContent;对于前三种写法,我们可以换个方式,给其加上括号A. const (char) *pContent;B. (char*) const pContent;C. (char) const *pContent;这样就一目了然。

根据对于const修饰非指针变量的规则,很明显,A=C.- 对于A,C, const修饰的类型为char的变量*pContent为常量,因此,pContent的内容为常量不可变.- 对于B, 其实还有一种写法:const (char*) pContent;含义为:const修饰的类型为char*的变量pContent为常量,因此,pContent指针本身为常量不可变.- 对于D, 其实是A和B的混合体,表示指针本身和指针内容两者皆为常量不可变总结:(1)指针本身是常量不可变(char*) const pContent;const (char*) pContent;(2)指针所指向的内容是常量不可变const (char) *pContent;(char) const *pContent;(3)两者都不可变const char* const pContent;还有其中区别方法:沿着*号划一条线,如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

php const用法

php const用法PHP const用法在PHP中,我们可以使用const关键字来定义常量。

常量是一个不可改变的值,它在定义之后不能被重新赋值。

常量的使用有很多场景,并且可以提升代码的可读性和可维护性。

下面是一些常见的const用法,以及对它们的详细讲解:1.定义常量使用const关键字可以定义一个常量。

常量名通常使用大写字母,并且使用下划线来分隔单词。

例如:const PI = ;在上述示例中,我们定义了一个名为PI的常量,其值为。

一旦定义了常量,就不能再改变它的值。

2.常量的作用域常量在定义后会被视为全局可见。

这意味着常量可以在代码的任何地方使用,而不受作用域的限制。

例如:const DATABASE_NAME = 'my_database';function getConnection() {echo 'Connecting to ' . DATABASE_NAME;}getConnection(); // 输出:Connecting to my_database 在上述示例中,我们在函数外定义了一个常量DATABASE_NAME,然后在函数内部使用了该常量。

函数能够访问并打印出该常量的值。

3.类常量在类中,我们可以使用const关键字来定义类常量。

类常量的定义与全局常量相似,但需要添加访问修饰符public、protected或private。

例如:class Car {const MAX_SPEED = 200;public function accelerate() {echo 'Accelerating up to ' . self::MAX_SPEED . ' km/h';}}$car = new Car();$car->accelerate(); // 输出:Accelerating up to 200km/h在上述示例中,我们定义了一个名为MAX_SPEED的类常量,并在类的方法中使用了该常量。

const用法总结

const⽤法总结1. const修饰变量int b = 100;const int* a = &b; //情况1int const* a = &b; //情况2int* const a = &b; //情况3const int* const a = &b; //情况4const修饰有三种情况:第⼀:const在“ * ”左边,则const⽤来修饰指针所指向的变量,即指针指向为常量,如情况1,情况2;第⼆:const在“ * ”右边,则const⽤来修饰指针本⾝,即指针本⾝是常量,如情况3;第三:const在“ * ”两边,则const既修饰指针本⾝也修饰指针所指变量,如情况4;注意:const的相对位置只与“ * ”有关,和变量的类型声明没有位置关系,其次const修饰指针所指变量时可以不初始化,但const修饰指针本⾝时必须初始化。

2. const在函数中的使⽤2.1 const修饰函数的参数输⼊参数采⽤“指针传递”,那么加const修饰可以防⽌意外的改动该指针指向的内存单元,起到保护作⽤,如StringCopy函数//输⼊参数: strSrc 输出参数:strDestvoid StringCopy(char* strDest, const char* strSrc);如果还想保护指针本⾝,则可以声明指针本⾝为常量,例如:void OutputString(const char* const pStr);如果参数⽤于输出,不论它是什么类型,也不论它采⽤“指针传递”还是“引⽤传递”,都不能加const修饰,即const只能修饰输⼊参数。

另外如果如果输⼊参数采⽤“值传递”,由于函数将⾃动⽤实参的拷贝初始化形参,因此即使在函数内部修改了该参数,改变的也只是堆栈上的拷贝⽽不是实参,所以⼀般不需要const修饰。

最好不要把void Func(const int x)改为void Func(const int &x)这样即达不到提⾼效率的⽬的有让⼈费解。

C语言中const关键字用法总结

C++语言中con‎st关键字用‎法总结一、const是‎什么在C/C++ 语言中,const关‎键字是一种修‎饰符。

所谓“修饰符”,就是在编译器‎进行编译的过‎程中,给编译器一些‎“要求”或“提示”,但修饰符本身‎,并不产生任何‎实际代码。

就const 修饰符而言,它用来告诉编‎译器,被修饰的这些‎东西,具有“只读”的特点。

在编译的过程‎中,一旦我们的代‎码试图去改变‎这些东西,编译器就应该‎给出错误提示‎。

所以,const修‎饰符的作用主‎要是利用编译‎器帮助我们检‎查自己代码的‎正确性。

我们使用co‎n st在源码‎中标示出“不应该改变”的地方,然后利用编译‎器,帮助我们检查‎这些地方是否‎真的没有被改‎变过。

如果我们不小‎心去修改了这‎些地方,编译器就会报‎错,从而帮助我们‎纠正错误。

使用const和‎不使用con‎s t,对于最终编译‎产生的代码并‎没有影响。

虽然cons‎t对于最终代‎码没有影响,但是尽可能使‎用const‎,将帮助我们避‎免很多错误,提高程序正确‎率。

二、const可‎以修饰哪些对‎象在上面已经提‎到过了,const是‎一种修饰符,那它可以作为‎哪些对象的修‎饰符呢?下面列举了一‎些C/C++中用到con‎s t的地方。

1,const变‎量2,const指‎针3,const引‎用4,const类‎5,类的cons‎t成员变量6,类的cons‎t成员函数7,const修‎饰函数的形参‎与返回值下面我们分别‎讨论上面几种‎情况下,const的‎用法。

三、const与‎变量当一个变量被‎c onst修‎饰后,具有以下几个‎特点:1)该变量只能读‎取不能修改。

(编译器进行检‎查)2)定义时必须初‎始化。

3)C++中喜欢用co‎n st来定义‎常量,取代原来C风‎格的预编译指‎令defin‎e。

1 const int var; // Error:常量变量"var"需要初始化设‎定项2 const int var1 = 42;3 var1 = 43; // Error:表达式必须是‎可以修改的左‎值上面代码中第‎一行和第三行‎都有错误,注释便是编译‎器给出的错误‎提示。

CONST用法

CONST用法面向对象是C++的重要特性.但是c++在c的基础上新增加的几点优化也是很耀眼的就const直接可以取代c中的#define以下几点很重要,学不好后果也也很严重const1. 限定符声明变量只能被读const int i=5;int j=0;...i=j; //非法,导致编译错误j=i; //合法2. 必须初始化const int i=5; //合法const int j; //非法,导致编译错误3. 在另一连接文件中引用const常量extern const int i; //合法extern const int j=10; //非法,常量不可以被再次赋值4. 便于进行类型检查用const方法可以使编译器对处理内容有更多了解。

#define I=10const long &i=10; /*dapingguo提醒:由于编译器的优化,使得在const long i=10; 时i不被分配内存,而是已10直接代入以后的引用中,以致在以后的代码中没有错误,为达到说教效果,特别地用&i明确地给出了i的内存分配。

不过一旦你关闭所有优化措施,即使const long i=10;也会引起后面的编译错误。

*/ char h=I; //没有错char h=i; //编译警告,可能由于数的截短带来错误赋值。

5. 可以避免不必要的内存分配#define STRING "abcdefghijklmn\n"const char string[]="abcdefghijklm\n";...printf(STRING); //为STRING分配了第一次内存printf(string); //为string一次分配了内存,以后不再分配...printf(STRING); //为STRING分配了第二次内存printf(string);...由于const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档