常变量与指针(小甲鱼视频笔记)

      在C语言中,常量的定义有两种。第一种是在程序初始时,利用define定义。比如#define PRICE 520, 或者#define A ‘a‘ 。第二种方法是在程序里,利用const定义。比如const int price 520,或者 const char a=’a’.

      第一种定义方式,没有数据类型。只是在程序编写完毕,进行编译的时候,计算机将程序里相应的位置进行直接替换,在正式运行的程序里就不存在了。这种方式的缺点在于不知道数据的类型,某些时候会造成不便,甚至更大的问题。

      第二种定义方式,具有数据类型。是在定义变量的基础上,在相应的定义前面增加一个锁定的前缀关键字“const”来锁定后面数据的值。这样这个数据就具有了数据类型。可以避免很多后续的麻烦。这个时候,这个变量只读,不可修改。但是从网上查,后续可以使用#undef这个命令取消定义(我还没学到,应该是真的吧)。然后就可以重新定义了。网上还写到define可以配合#ifdef、ifndef、ttendif来使用,可以让代码更加灵活。这些我还没学到,先学怎么使用const吧。CSDN例一个帖子例看到这句话:很多C++程序设计书籍建议”Use const whenever you need”,所以我觉得有可能老鸟都是用const来定义常量的,或者说用这个方法防止变量的值被改变。

一、定义了const后不可被改变,试图改变会报错

 例:

     int main()

       {

           const float pi=3.14;

           printf(“%f\n”,pi);

       pi=3.1415;    //error:assignment of read_only variable’pi’   报错:试图修改只读变量。

       return 0;

       }

 

二、指向常量的指针:

     指针可以修改为指向不同的常量

     指针可以修改为指向不同的变量

     可以通过解引用来读取指针指向的变量数据

     不可以通过解引用来修改指针指向的常量数据

  例:int main()

       {

           int num=520;

           const int cnum=888;

           const int *pc=&cnum;   //定义常量指针

           printf(“cnum:%d, &cnum: %p\n”,cnum,&cnum);

           printf(“*pc:%d,pc:%p\n”,*pc,pc);

          

           *pc=1024;    //试图修改常变量,会报错

           return 0;

       }

 

三常量指针:

指针定义时在指针名前加const,成为常量指针,此指针的指向不可修改。

指向非常量的常量指针,指针自身指向不可以被修改,指针指向的值可以被修改。

指向常量的常量指针,指针自身不可以被虚构,指针指向的值也不可以被修改。

 

 

    例1: int main()

       {

           int num=520;

           const int cnum=888;

           int * const p=#  //定义常量指针。此时const修饰的是变量p

           *p=1024;  //被指向是变量,故可以操作。

           printf(“*p: %d\n”,*p);

           p=&cnum;   //这个是被禁止的,不可以操作。

           printf(“*p: %d\n”,*p);

 

           return 0;

       }

 

    例2:

int main()

       {

           int num=520;

           const int cnum=888;

           const int * const p=&cnum;  //定义常量指针指向常量,

           *p=1024;  //被指向是常量,故不可以操作。

           printf(“*p: %d\n”,*p);

           p=&cnum;   //这个是被禁止的,不可以操作。

           printf(“*p: %d\n”,*p);

 

           return 0;

       }

    例2在实际中很少使用。

 

四、指向“指向常量的常量指针”的指针

 

int main()

       {

           int num=520;

           const int cnum=888;

           const int * const p=#  //定义常量指针。此时const修饰的是变量p

           const int * const *pp=&p; //指向“指向常量的指针”的指针

          

           printf(“pp: %p\n &p:%p\n”,pp,&p);//两个地址应该一致

           printf(“*pp: %p, p:%p,&num:%p\n”,*pp,p,&num); //三个地址是一致的

           printf(“**pp:%d,*p:%d,num:%d\n”,**pp,*p,num);//三个内容一致

 

           return 0;

       }

posted @ 2022-10-11 15:09  顶级太阳  阅读(63)  评论(0)    收藏  举报