const Basic



Highlight

1.  const 修饰基本类型

2.  const和指针

3.  typedef & const

4.  const用法和使用位置



1.  const 修饰基本类型

  const int a
  int const a

    上面两个都一样,描述的都是一个const的整形变量,存放在只读区域

2.  const和指针

1.  const int * a
2.  int *const a
3.  int const* const a

  对指针的理解
  int *a[10]        []优先级高于*,是一个数组,每个成员类型为指针,指向int
  int (*a)[10]     ()优先级高于[] 是一个指针,指向的类型是一个数组

  指针的判断从右向左

    1).  const int*a            //a是一个指向const int的指针 指向的数据不可以修改

    2).  int *const a          //只读的指针,指向的类型为int类型的变量

    3).  int const* const a     //指针不可修改, int const是指针指向的类型,仍然是const

  1 #include <stdio.h>
  2
  3 int main()
  4 {
  5     char static data_var=‘c‘;
  6     char const data_const=‘a‘;
  7
  8     char *const p1=&data_var;
  9     const char* p2=&data_const;
 14     p1=&data_var;  // 报错!!!!         p1 不能修改指针
 15     *p1=‘W‘;      // 编译通过            p1 可以修改数据
 16  
 17     p2=&data_var;  // 编译通过       p2可以修改
 18     *p2=‘a‘;      // 报错!!!      p2不可以修改数据
 19
 20     }

3.  typedef & const

    问题: const void * ptr 和 const vp ptr 的存储位置是否一样

typedef void*VP;

const void * ptr;  存储位置:

const VP ptr;    存储位置:

    1). 了解基本存储位置

        const类型变量 只读区域          ---linux里--const类型变量----代码段
        全局&静态     数据段 bs段
        局部            栈里面

    2). typedef

        typedef定义一种数据类型, 一定要与define区分开
        所以代码中的 typedef void* VP;       //VP 是类型名字,其余的是这个类型的真实类型

        const VP ptr
            -->思考: 是不是替换为 const void *ptr??? 不是, void *是一个整体

        上面已经说过  const int i == int const i;  所以  VP const prt 既 void *const ptr

        const VP ptr  ==  void * const ptr; 

        所以上面两个存储位置不同

4.  const用法和使用位置

作用
    1. 传递一个‘不修改’ 的信号
    2. 编译器生成精简代码减少bug
    3. 合理保护只读数据

使用位置
    1. 定义常亮, 防止被修改
    2. 函数参数,不希望子函数修改被调用函数的某个数据
        char* strcpy(char* dest, const char* src)
        char* strncpy(char* dest, const char* src, size_t n)
    3. C++类的成员函数

时间: 2024-10-12 03:07:10

const Basic的相关文章

c++, 派生类的构造函数和析构函数

1.构造函数与析构函数不会被继承:[1] 不是所有的函数都能自动地从基类继承到派生类中的.构造函数和析构函数是用来处理对象的创建和析构的,它们只知道对在它们的特殊层次的对象做什么.所以,在整个层次中的所有的构造函数和析构函数都必须被调用,也就是说,构造函数和析构函数不能被继承. 另外,operator= 也不能被继承,因为它完成类似于构造函数的活动. 2.派生类的构函数被调用时,会先调用基类的其中一个构造函数,因为在派生类的构造函数中用了初始化表的方式调用了基类构造函数,默认不写时是调用了基类中

使用Formik轻松开发更高质量的React表单(一)入门

前言 发现Formik是在我学习redux-form过程中从国外一篇博客上偶然发现的,看到作者的高度肯定后我立即转到github上,正如许多朋友所注意的,我发现其星数达8282,这个数字在github虽然不算很高,但是在探讨基于React技术开发跨平台表单这个主题的开源库角度来看,这个数字已经相当不错了.不自觉地,我对比了redux-form与Formik的几个数据,如下: 库 开源库的时间 星数 redux-form 3年以前 10210 Formik 1年前 8282 几个不太肯定的结论(欢

[C++] Variables and Basic Types

Getting Started compile C++ program source $ g++ -o prog grog1.cc run C++ program $ ./prog The library, iostream, define four IO object: cin, cout, cerr, clog. std::cout << "hello world" << std::endl; The result of the output operato

[RxJS] Basic DOM Rendering with Subscribe

While frameworks like Angular 2 and CycleJS provides great ways to update the DOM and handle subscriptions for you, this lesson shows how you can still do basic subscribe blocks and manually update the DOM on your own. const Observable = Rx.Observabl

hdu-5929 Basic Data Structure(双端队列+模拟)

题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 207    Accepted Submission(s): 41 Problem Description Mr. Frog learned a basic data structure recently, which is called

leetcode Basic Calculator

题目连接 https://leetcode.com/problems/basic-calculator/ Basic Calculator Description Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non

HDU 5929 Basic Data Structure 模拟

Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description Mr. Frog learned a basic data structure recently, which is called stack.There are some basic operations of stack: ? PUSH x: p

Basic脚本解释器移植到STM32

本文来自http://blog.csdn.net/hellogv/ .引用必须注明出处! 上次讲了LUA移植到STM32.这次讲讲Basic脚本解释器移植到STM32. 在STM32上跑Basic脚本,相同能够跟穿戴设备结合.也能够作为刚開始学习的人学习MCU的入门工具,当然前提是有人做好Basic的STM32交互实现.这里使用的是uBasic开源脚本解释器(http://dunkels.com/adam/ubasic/),只是uBasic不支持完整的Basic算法,所以用起来略费心,假设有好的

A Tour of Go Basic types

Go's basic types are bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte // alias for uint8 rune // alias for int32 // represents a Unicode code point float32 float64 complex64 complex128 package main import ( "fmt&quo