"常量指针" 和 "指针常量"

常量指针:“是常量的指针”,即指针指向一个常量。
要注意的两点:
1. 常量指针,指针指向的是一个常量,意思是说,存储在"指针存储的内存里"的内容是一个常量,所以不能修改常量指针指向的内存地址里内容。

2. 常量指针指向(存储)的内存地址可以修改。

示例代码:

 1#include <iostream>
 2using namespace std;
 3
 4int main()
 5{
 6    int iConst = 5;
 7
 8    int iConst2 = 20;
 9
10    /* 声明一个常量指针 */
11    const int* p = &iConst;  // 这里p是一个指向常量的指针,即存储在“指针p指向(存储)的内存地址”里的内容是一个常量
12
13    /* 解除指针的引用,取出存储在“指针p指向的内存地址”里的内容 */
14    cout << *<< endl;      // OK,output 5.
15    
16    /* 试图修改存储在“指针p指向的内存地址”里的内容 */
17    *= 10;                 // error!因为指针p指向的内存地址里的内容是一个常量,不可以修改.
18
19    /* 常量指针指向的内存地址可以修改 */
20    p = &iConst2;
21
22    cout << *<< endl;      // OK,output 20.
23    
24    return 0;
25}
上述代码,如果error没有注释掉,编译器在编译的时候会指出一个错误,如下:
 error C2166: l-value specifies const object

指针常量:“是指针的常量”,即指针存储的内存地址是一个常量,不能修改。
要注意的两点:
1. 指针常量,即指向(存储)的内存地址是一个常量的指针,它指向的内存地址是一个常量不能修改。
2. 存储在“指针常量指向(存储)”的内存地址里的内容,不是常量,可以修改.

示例代码:
 1#include <iostream>
 2using namespace std;
 3
 4int main()
 5{
 6    int iConst = 5;
 7    int iConst2 = 20;
 8
 9    /* 声明一个指针常量 */
10    int* const p = &iConst;  // 这里p是一个指针常量,即存储在“指针p指向(存储)的内存地址”是一个常量
11
12    /* 解除指针的引用,取出存储在“指针p指向的内存地址”里的内容 */
13    cout << *<< endl;      // OK,output 5.
14    
15    /* 试图修改“指针p指向的内存地址“ */
16    p = &iConst2;                 // error!因为指针p指向的内存地址是一个常量,不可以修改.
17
18    /* 指针常量指向的内存地址的内容不是常量,可以修改 */
19    *= 33;                   // OK.    
20    cout << *<< endl;        // OK,output 33;
21    cout << iConst << endl;    // OK, output 33;
22    
23    return 0;
24}
同样地,上述代码,如果error没有注释掉,编译器在编译的时候会指出一个错误,如下:
 error C2166: l-value specifies const object


posted on 2011-04-27 20:21 梦五 阅读(209) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜