最近发现在单片机的变成当中,const的使用挺频繁的,一旦被const修饰,那么这个常量就不能改变。 与#define有区别,主要与指针一同使用,接下来我们进行一些学习吧。
修饰局部变量一般有两种写法,但是你入股要对变量进行赋值的话,就一定要给变量初始化,否则就不能赋值了。
//这两种写法是一样的,包括数组的话这两种写法也是一样的
const int n=5;
int const n=5;
const int a[3]={1,2,3};
常量指针是指针指向的内容是常量,有两种定义方法。就是不能更改指针所指向的内容,但是可以更改指针的地址
const int * n;
int const * n;
int a = 5;
const int *p =&a;
*p = 20; //error 不可以通过修改所指向的变量的值
int b =20;
p = &b; //right 指针可以指向别的变量
指针常量指的是这个指针本身是个常量,就不能随意更改指针的地址,也就是指针的地址是固定的,所以指针所指向的内容就可以随意更改。
//定义形式
int *const a;
int a = 5;
int *const p = &a;
*p = 20; //right 可以修改所指向变量的值
int b = 10;
p = &b; //error 不可以指向别的变量
也就是将两者融合,就是既不能改变指针的地址,也不能更改指针所指向的内容。
const int *const p;
然后的话使用最多的场景就是函数的参数会带修饰。
作为函数参数的话有三种使用情况。
void StringCopy(char *strDestination, const char *strSource);
这么一个函数,前面是输入函数的指针,后面是想输出的指针,我们给后面的指针变为常量指针之后,就是相当于我们在函数内部不能更改指针所指向的内容,只能对其指针进行修改,比如我们写好后,我们就可以将我们修改好后的指针的地址传入到这个指针当中,其实也相当于对内容进行了修改,只是变相的进行了修改。
void swap ( int * const p1 , int * const p2 )
防止指针的地址被修改,但是能修改指针所指向的内容,我感觉这部分内容可能比较设计的多。
相当于就是指针所指向的地址和内容都不允许都不能被修改
如果给以“指针传递”方式的函数返回值加 const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。 给出下面这个例子:
const char * GetString(void);
char *str = GetString();//error
const char *str = GetString();//right
本文章使用limfx的vscode插件快速发布