指针常量, 常量指针, 常量的指针常量

来源:互联网 发布:淘宝商城入驻流程 编辑:程序博客网 时间:2024/06/09 05:53
/// @file exam_test.cpp/// @brief 指针常量, 常量指针, 常量的指针常量#include <windows.h>#include <stdio.h>#include <stdlib.h>void fnTest1(int n);int main(){    int n = rand();    int m = rand();    int const m1 = rand();    const int m2 = rand();    int const *p = &n; ///< 常量指针(常量的指针, 指针本身可以改,但是指针指向的变量不能再通过指针赋值)    const int *p2 = &n; ///< 只要const修饰符号在*的左边, 在类型声明左边或右边都一样    int * const p1 = &n; ///< 指针常量(指针是常量, 指针本身是常量, 指针不能再指向另外一个变量)    int const * const p3 = &n; ///< 常量的常量指针, 指针不能改,指针指向的地址内容也不能改    /// p3 = &n; ///< error C2166: l-value specifies const object    /// *p3 =2; ///< error C2166: l-value specifies const object    p = &m; ///< ok, 常量指针, 可以对指针本身再赋值, 不能对该指针指向的地址再赋值    /// *p = 2; ///< error C2166: l-value specifies const object    *p1 = 2; ///< ok, 指针常量,指针本身是常量,不能再赋值, 但是可以对指针指向的地址赋值    // p1 = &m; ///< error C2166: l-value specifies const object        fnTest1(rand());    /// 常量定义赋初值后, 编译器限制其不能在语法层面再修改    /// m1 = 2; ///< error C2166: l-value specifies const object    /// m2 = 3; ///< error C2166: l-value specifies const object    n = 8; ///< ok, 不管指针如何修饰, 变量是可以修改        /// 常量指针和指针常量是编译器做的限制.    /// 如果违规, 在编译时不能通过.    /// *p = 6; ///< error C2166: l-value specifies const objectreturn 0;}void fnTest1(int n){    int const iTmp1 = n;    const int iTmp2 = n;    // iTmp1 = 2; ///< error C2166: l-value specifies const object    // iTmp2 = 3; ///< error C2166: l-value specifies const object}

0 0
原创粉丝点击