const与指针的使用
- 问题描述:
C#中的readonly和static以及const的比较和对比分析
- 问题解决:
const使用
如上例我们可以得出如下结论:
- (1)typedef 定义一个类型的别名(为一个类型取一个新名字),而#define只是简单的字符串替换
例如
typedef char * Ptr;
#define Def char * (注意这里没有分号的结束符)
Ptr s1,s2;
Def s3,s4;
上述定义的s1和s2是char *类型,对Def进行字符串替换也就是char *s3,s4;也就是说s3是一个char 指针,s4是一个char类型变量
- (2)由上面的程序我们可以看出对于*、++是出于同一优先级,但是++放在变量的左边和右边,具体的优先级不一样,具体而言:左边的++ > * >右边的++
- (3)交换const与变量类型的位置意思是一样的
如上所示const char * 和char const *含义是一样的!
- (4)const限定的谁是常变量:
上述指出了三种被const修饰的变量的值
(4.1)指向常量的指针
const char * value
-----指针的值可以改变,但是指针指向的值不允许改变
(4.2)常指针
char *const value;
------指针的值不允许改变,但是指针指向的变量的值允许改变
(4.3)指向常量的常指针
const char *const variable;
-------指针的值不允许改变,指针指向的变量的值也不允许改变
总结:
一个简单的判断方法:指针运算符*,是从右到左,那么如:char const * pContent,可以理解为char const (* pContent),即* pContent为const,而pContent则是可变的
const在*的左边,则指针指向的变量的值不可变;在*的右边,则指针的指向不可变。简记为“左定值,右定向”。