常变量与指针(小甲鱼视频笔记)
在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;
}

浙公网安备 33010602011771号