【C語言】const修飾指針的三種效果

當用const進行修飾時,根據const位置的不同有三種不同效果。 判斷的標準是:const修飾誰,誰的內容就是不可變的。

1   const int *p = &a;

  const修飾*p, *p不可變,p是指針,*p是指針p指向的內存單元裏的內容,*p不可變也就是p指向的內存單元裏的內容是不可變的。

PS: 這兒*p是不可變的,但是p是可變的,就是p指向的內存單元或者說變量是可以變的,但是p指向誰,誰的值就不可變。

     不可變指的是不能用*p改變a的值,但是a自己或者別的指針還是可以修改a的值。

  int main(void)
  {
    int a = 10;
    const int *p = &a; //不可以用*p改變a的值

    int *q = &a;
    *q = 20;  //可以用*q改變a的值
    printf("a = %d \n", a);
    a = 30; //給a賦值也可以修改a的值
    printf("a = %d \n", a);
    system("pause");
    return 0;
  }

使用時機:定義形參時,如果不想改變參數的值,可以用const修飾

2   int* const p = &a;

  const修飾p,指針p是不可變的,也就是p指向的內存單元不可變。即p的指向不可變,p指向的內存單元的內容可以變。

3   const int* const p = &a;

  *p和p都被const修飾了,所以p指向的內存單元,和p指向內存單元中存放的內容都是不可變的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章