欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c语言初学-const指针

程序员文章站 2023-08-24 16:30:27
注意:要在声明的时候进行初始化 声明的方式:类型名 * const 变量名 1.不能再指向别的变量,指针的value不可更改 [cpp] #include

注意:要在声明的时候进行初始化
声明的方式:类型名 * const 变量名
1.不能再指向别的变量,指针的value不可更改
[cpp]
#include<stdio.h> 
void main(){ 
    int a = 89; 
    int * const p = null; 
    p = &a; 
 

 
报错:
error c2166: l-value specifies const object
2.可以通过指针为那个变量赋值(变量值不是const)
[cpp]
#include<stdio.h> 
void main(){ 
    int a = 89; 
    int * const cp = &a; 
    *cp = 188; 
    printf("a=%d\n",a); 

 
结果:
a=188
press any key to continue
3.const指针指向的是const变量,改变变量的值(在linix下可以实现)
[cpp]
#include<stdio.h> 
void main(){ 
    const int b = 89; 
    int * const pp = &b; 
    *pp = 100; 
    printf("b = %d\n",b); 

第二种声明方式:const 类型名 * 变量名
1.pointer to constants 指向常量的指针
  指向常量的指针,防止通过指针去修改变量的值,不管该变量是否是const变量
[cpp]
#include<stdio.h> 
void main(){ 
    int x = 123; 
    const int *pc = &x; 
    *pc = 8989; 
    printf("%d\n",x); 

 
结果:不能修改
rror c2166: l-value specifies const object
2.指向常量的指针,该指针可以指向别的变量,指针的value是可以更改
[cpp]
void main(){ 
    int x = 123; 
    int y = 321; 
    const int *pc = &x; 
    printf("%p\n",pc); 
    pc = &y; 
    printf("%p\n",pc); 

 
3.指向常量的指针,不能赋值为一个普通的指针,因为指向常量的指针是不可以修改变量的值的,如果把它赋给了一个普通的指针,那么就可能
实现修改变量的值,所以是不可以的
[cpp]
#include<stdio.h> 
void main(){ 
    int x = 123; 
    const int *pc = &x; 
    int *q = pc; 

 
报错:
error c2440: 'initializing' : cannot convert from'const int *' to 'int *'conversion loses qualifiers
 
第三种声明方式:const int * const 变量名
该指针变量的值和该指针指向的空间的值都是不可改变的
 
 
 
加深:
[cpp]
#include<stdio.h> 
void main(){ 
//第一基本类型的const变量,const位置在哪儿都可以 
    const int x = 123; 
    const int y = 321; 
//定义一个非constbianl 
    int z = 111; 
//定义一个指向常量的指针 
    const int *p = &x; 
//定义一个常指针 
    int *const q = &z; 
//定义一个非const指针 
    int * w = &z; 
 
    x=y;//是错误的,因为const变量是不能修改的,而且const变量不能做左值 
    p=&z;//正确,指向常量的指针的value的值是可以修改的,就是说可以指向别的变量,但是不能通过该指针去修改它所指向的内存空间 
 
的值 
    *p=10;//错误,指向常量的指针中,是不能通过指针来修改变量的值的 
    *p=y;//错误,同上 
    p=w;//正确,指向常量的指针他的value是可以修改的 
    z=5;//正确,z是一个变量,可以改变它的值 
    z=x;//正确,x作为const变量只能作为右值,不能作为左值 
    *q=x;//正确,const指针变量是可以修改它所指向的地址里面的值 
    q=&x;//错误,因为x在这里是作为常量的存在,是不能改变的,而q这个指针是可以通过它来改变变量的值的 
         //不过原则是是可以的,标准c中是可以改变变量的值的 
    w=&x;//错误,因为x在这里是作为常量的存在,是不能改变的,而w这个普通的指针是可以通过它来改变变量的值的 
         //不过原则是是可以的,标准c中是可以改变变量的值的 
    w=p;//错误,因为指向常量的指针是不能改变它所指向的内存空间里的值的,而w这个普通的指针是可以通过它来改变变量的值的,所以 
 
不能把指向常量的指针赋给普通的指针 
    w=q;//正确,因为q这个指针是可以通过它来改变变量的值的,而w这个普通的指针也是可以的 
 
     
 


摘自 like7xiaoben