2014-11-04 109 views
3

实际上,我不知道正常指针和常量指针 之间的区别是什么,如果我使用下面的代码,它会正常工作。但是当我将int *ptr=#更改为int *const ptr = &var1;时,它不起作用。任何人都可以解释一个普通指针和一个常量指针有什么不同?正常指针和常量指针在c中的区别

int main(void) 
    { 
     int num = 20; 
    int *ptr = &num ; // if i change to `int *const ptr = &var1;` then it shows some error 

    *ptr = 20 ;    // Valid 
    ptr ++ ;     // valid 

     return 0; 
    } 

回答

5
int* const ptr = &num ; 

将创建一个常量指针为int。它指向的数据可以改变,但它自己的指针不能。

你不能改变指针:

ptr++ ; 

但你可以改变数据:

*ptr = 1234 ; 
+0

u能告诉我实际上使用const指针的地方 – 2014-11-04 13:07:03

+0

@ArunPrasanth如果你知道指针应该总是指向同一个位置,你可以使它成为const。 – 2501 2014-11-04 13:07:47

1

此:

int* const ptr = &num ; 

将创建一个常量指针整数。您可以使用它来修改整数值,但不能更改指针指向的位置,因此ptr++ ;无效。

const关键字通常应用于其左侧的符号,例如,当你想通过周围的固定存储位置

int * const ptr; // A constant pointer (*) 
int const * ptr; // A pointer to a constant integer 
int const * const ptr; // A constant pointer to a constant integer 
const int *ptr; // Shorthand for pointer to a constant integer (equivalent to int const * ptr;) 

const指针是有用的,你要确保没有人会修改指针的尖头地址。

+1

感谢您的快速回放 – 2014-11-04 13:11:45

1

in c,consttype qualifier。在某些变量定义中使用const表示变量不会在程序的整个生命周期中被修改(将被视为read-only)。

通常,当定义一个变量/数据类型为const时,实践是用所需的值初始化它,通常情况下,它保存的值不能在稍后的部分修改。

例如:

const int a = 10;

装置,所述整数a将保持值10,它不能被改变。在稍后的部分,

a = 20; 

将产生错误。

所以,你的情况

int *const ptr = &var; 

这里,ptr总会举办的var地址,它不能被改变,即我们不能写

ptr = &num2; // where num2 is another int, declared like int num2; 

它会显示编译时错误,如:

error:assignment of read-only variable "*ptr".

你可以找到一个很好的和方便的描述here

3

我们可以做地址

  • 印刷价值或解决
  • 在声明的时间分配地址上不变指针

    • 分配值以下操作。

    我们无法不变指针

    • 添加到整数恒指针下面的操作。
    • 将整数减去常量指针。
    • 任何可以改变指针地址的操作。

    所以,在这里,你的问题..

    如果声明

    int* const ptr = &num ; // this is ok 
    

    下一行

    *ptr = 20 ; // Assigning value at address this is ok 
    

    现在,

    ptr ++ ; // you can not change the value // Error! 
    

    希望它有帮助!

  • 1
    int* const pointer = &x ; 
    

    它创建一个指向int的常量指针。数据它指向的是可以改变的,但指针它自身无法改变

    你不能改变指针:

    pointer++ ; 
    

    在这里你可以改变数据:

    *pointer=1 ;