我们在哪里以及为什么使用“指向常量的指针”,“常量指针”和“指向常量的常量指针”?

时间:2014-10-23 12:44:23

标签: c++ pointers const constants

所以,如果我在C ++中有这样的东西:

char A_char = 'A';
char * myPtr = &A_char;

const char * myPtr = &char_A; //pointers that point to constants
char * const myPtr = &char_A; //constant pointers
const char * const myPtr = &char_A; //constant pointers that point to constants

我想知道我们在哪里以及为什么使用"指针指向常量","常量指针"和"常量指针指向常数"在编程中。我知道它们和它们的语法之间的差异,但我不知道我们使用它们的位置和原因。你能解释一下吗?谢谢你们。

3 个答案:

答案 0 :(得分:1)

常量指针是一个指针,它不能改变它所持有的地址。

<type of pointer> * const <name of pointer>

一个指针,通过该指针无法更改它指向的变量的值,称为指向常量的指针。

const <type of pointer>* <name of pointer>

指向常量的常量指针是一个指针,既不能改变它指向的地址,也不能改变保存在该地址的值。

const <type of pointer>* const <name of pointer>

您可以在此处找到有关其用法的更多详细信息: http://www.codeguru.com/cpp/cpp/cpp_mfc/general/article.php/c6967/Constant-Pointers-and-Pointers-to-Constants.htm

答案 1 :(得分:0)

如果数据不应改变:
使用指向常量数据的指针 const char * myPtr = &char_A;

如果数据可以改变,但指向的内存不应该:
使用常量指针:
char * const myPtr = &char_A;

如果数据不应改变且指向的内存也不应改变:
使用指向常量数据的常量指针:
const char * const myPtr = &char_A;

真的没有比这更多了。

答案 2 :(得分:0)

因为您要求使用示例:

  • 指向常量char的指针的典型用法是将指针传递给只读存储器(例如字符串文字)。可以取消引用该内存,但修改(未定义的行为)

    const char* myPtr = "this is read only memory";
    
  • 可以使用指向char的常量指针来传递可以修改的缓冲区位置,但不能更改位置(即,您需要专门使用该内存区域)

    char * const myPtr = some_buffer_location;
    printBuffer(myPtr);
    
    void copyToBuffer(char * const &pointer_to_buffer /* Reference to pointer */) {
        const char* my_contents = "this is my content";
        strcpy(pointer_to_buffer, my_contents); // Buffer contents can be changed
        // pointer_to_buffer = NULL; - error! Not assignable
    }
    
  • 上述组合可用于传递只读存储区域并确保指向的地址保持不变其内容保持不变。

    < / LI>

实现完全常规正确性非常困难,但如果有人希望实现这一目标,则必须正确组合上述标志。