const基本用法

1、const int a=1;  //此时a为常量,其值不能改变,而且在定义的同时必须初始化

错误的程序:

#include <stdio.h>

#include <stdlib.h>



int main()

{

    const int a;

    a=1;

    

}

a在定义的同时没有初始化,同时后面又尝试修改a的值。

正确的代码:

#include <stdio.h>

#include <stdlib.h>



int main()

{

    const int a=1;

}

2、const int *p;    //p指向的内容不可变,但是可以使该指针指向其他的int型变量

错误的代码:

int main()

{

    int val=1;

    const int *p=&val;

    *p=3;

}

此时,尝试通过指针修改其指向的内容,报错:error: assignment of read-only location '* p'

正确的代码:

int main()

{

    int val=1;

    const int *p=&val;

    val=3;



    printf("%d\n",*p);

}

虽然不能通过指针修改其指向的内容,但是可以通过原变量的名直接修改其指向的内容。

正确代码2:

int main()

{

    int val=1;

    int k=3;

    const int * p=&val;

    p=&k;



    printf("%d\n",*p);

}

虽然不能通过指针改变其指向对象的值,但是可以修改该指针的指向,且指针p在定义的同时,不一定要同时初始化。

3、int * const p=&val;    //此时p只能指向变量val,不能指向其他变量

错误的代码:

int main()

{

    int val=1;

    int k=3;

    int * const p=&val;

    p=&k;



    printf("%d\n",*p);

}

此时会报错:error: assignment of read-only variable 'p'

正确代码2:

int main()

{

    int val=1;

    int * const p=&val;

    *p=3;



    printf("%d\n",*p);

}

虽然不能改变指针的指向,但是可以通过指针改变其指向的对象的值。

4、const int * const p=&val;    //指针p的指向不能被改变,同时其指向的内容的值也不能通过该指针改变

错误的代码:

int main()

{

    int val=1;

    int k=3;

    const int * const p=&val;



    p=&k;



    *p=3;



}

此时,会有两个错误:

1)error: assignment of read-only variable 'p',说明p的指向时不能改变的;

2)error: assignment of read-only location '*(const int*)p',说明p指向的对象(val),不能通过指针修改其值。

但是:

int main()

{

    int val=1;

    const int * const p=&val;

    val=3;

}

我们仍然可以通过变量名来修改其值,也就是说我们所说的“指向的对象的值不能改变”是说不能通过指针的方式修改。

 

你可能感兴趣的:(Const)