首页 > 编程知识 正文

c语言strcmp的用法(c语言 static)

时间:2023-05-05 15:10:49 阅读:87321 作者:2063

const基本介绍

常数是常数的简称,用于定义常数。 这将限制一个变量不变,从而产生静态作用。 const最初发售的目的是取长补短,以代替预编译指令。

与define的对比

define是预编译指令,定义的宏在预处理阶段展开。 另一方面,const是普通变量的定义,是只读变量,在编译执行阶段使用。 define定义常数。 由define定义的宏在编译后消失,不消耗内存。 另一方面,const定义的常变量本质上是变量,具有变量的基本属性,有类型,消耗存储器单元。 除了不能用作数组的长度之外,常量定义的常变量具有宏的优点,而且易于使用。 由define定义的对象没有数据类型,编译器只能机械地替换字符。 如果没有类型的安全性检查,则会发生“极限问题”或“括号问题”。 const定义变量,有数据类型。 让我从几个方面说明一下const的使用方法。

修饰局部变量

一致性指数=5;

intconstnum=5;

两种写法都相同,表示变量num的值无法变更。 用const修饰变量时,请务必初始化。 不那样的话,之后就无法进入。 特殊情况将在后面叙述。

接下来,让我们看一下const用于修饰常量静态字符串的示例。

常数符号*符号=' tech dreamer ';

如果没有const修饰,以后可能会无意中修改代码,如str [4]=’d’。 由此,发生向只读存储器区域的代入,程序异常结束。

如果添加const修饰,则在编译程序时会立即检测到该错误,在编译时会发现逻辑错误,从而可以防止后续的调试继续进行。

修饰全局变量

全局变量的范围是整个文件,全局变量的生存期是程序执行的整个过程,因此应该尽量避免使用全局变量。 一种隐藏的操作,其中一个函数更改全局变量的值会影响引用该变量的其他函数。

如果一定要使用全局变量,则应该尽量使用常量进行修饰,以免不必要的人进行修改。 用const修饰的局部变量具有静态特性,其生存周期也是程序执行的全过程,并不是因为具有静态特性就变成了静态变量。

修饰常量指针与指针常量

常量指针

常数指针的指针指向的内容为常数,有以下两种定义方法。

常数*编号;

int一致*编号;

需要注意以下两点。

常量指针是指,该指针不能改变变量值,但可以在其他引用中改变变量值。 intcnt=5;

常数*编号=CNT;

cnt=6;

虽然常数指针指向的值不能更改,但这并不意味着指针本身不能更改,常数指针可以指向其他地址。 intcnt=5;

inttmp=6;

常数*编号=CNT;

数字=位图;

指针常量

指针常数是指针本身为常数,不能指其他地址。 写法如下。

int *一致编号;

另外,指针常数指向的地址无法变更,但地址中保存的数值可以变更。 可以用指向要更改地址的指针的其他指针进行更改。

intcnt=5;

int*tmp=cnt;

int *常数=CNT;

*tmp=6;

区别常数指针和指针常数的关键是星号的位置,以星号为分界线。

如果const在星号的左侧,常数指针const在星号的右侧,则可以将指针常数星号读作“指针”,将const读作“常数”,这样内容就会完全一致。

int一致*编号; 常数指针,整数*常数; 是指针常数。

指向常量的常指针

也有指向常数的常规指针。 这相当于常数指针和指针常数的组合,指针指向的位置

不能改变并且也不能通过这个指针改变变量的值,例如

const int* const num;

这个代表num所指向的对象的值以及它的地址本身都不能被改变

修饰函数的形参

根据常量指针与指针常量,const修饰函数的参数也是分为三种情况

防止修改指针指向的内容void FUN(char *destin, const char *source);

其中 source 是输入参数,destin 是输出参数。给 source 加上 const 修饰后,如果函数体内的语句试图改动 source 的内容,编译器将报错,但反过来是可以的,编译器允许将char *类型的数据赋值给const char *类型的变量。

防止修改指针指向的地址void FUN ( int * const p1 , int * const p2 )

指针p1和指针p2指向的地址都不能修改。

以上两种的结合。

在C语言标准库中,有很多函数的形参都被 const 限制了,下面是部分函数的原型:

size_t strlen ( const char * str ); int strcmp ( const char * str1, const char * str2 ); char * strcat ( char * destination, const char * source ); char * strcpy ( char * destination, const char * source ); int system (const char* command); int puts ( const char * str ); int printf ( const char * format, ... );

修饰函数的返回值

如果给以“指针传递”方式的函数返回值加 const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针,例如

const char * FUN(void);

如下语句将出现编译错误:

char *str = FUN();

正确的用法是

const char *str = FUN();

思考

C与C++中的const用法有什么区别?编译器会给const定义的变量分配存储空间吗?const变量能被其他文件extern引用吗?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。