详解const、static关键字

这篇具有很好参考价值的文章主要介绍了详解const、static关键字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录 

一、static关键字

二、const关键字

一、static关键字

在c语言中:

static是用来修饰变量和函数的

        1.修饰局部变量——称为静态局部变量

        2.修饰全局变量——称为静态全局变量

        3.修饰函数——称为静态函数

有关内存相关知识补充:程序的所有数据,也就是所有的变量,都是存储在内存中的,而内存中又可以分为栈区、堆区、静态区。

const static,c++,c语言,数据结构

 1.1 static修饰局部变量

作用:1.static修饰的局部变量改变了变量的生命周期

           2.让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束

           3.改变变量的存储类型(位置):栈区/堆区---->静态区

代码演示:

const static,c++,c语言,数据结构

 由以上代码可以看出,在没有static修饰的时候每一次调用test函数,函数中i的值都会重新赋值,而当i变量由static修饰的时候,在test结束之后并没有被销毁,下次调用test函数时i的值仍然是上次调用时i++的值。

可以看出,由static修饰的局部变量生命周期变长了。

1.2 static修饰的全局变量

作用:如果一个全局变量被static修饰,那这个全局变量就只能在本源文件中使用,不能在其他源文件内使用。

代码演示:

//代码1
//lin.c
int bite_lin=20;

//test.c
extern bite_lin;//外部符号声明
int main()
{
    printf("%d\n",bite_lin);
    return 0;
}


//代码2
//lin.c
static int bite_lin=20;

//test.c
extern bite_lin;
int main()
{
	printf("%d", bite_lin);
	return 0;
}

const static,c++,c语言,数据结构

可以看出:static修饰的全局变量改变了这个全局变量的链接属性,使得这个全局变量由外部变量转变成内部变量,这个静态变量只能在自己的源文件内部使用,而不能在其他源文件内部使用。(简要的说:限制了使用范围,让人感觉作用域变小了) 

1.3 static修饰的函数

作用:static修饰的函数和修饰的全局变量类似,限制了函数的使用范围,使得该函数只能在本源文件中使用,而不能在其他源文件中使用。

代码演示:

//代码1
//add.c
Add(int x, int y)
{
	return x + y;
}
//test.c
extern Add(int x,int y);//外部函数声明
int main()
{
	printf("%d", Add(2, 3));
	return 0;
}


//代码2
//add.c
static Add(int x, int y)
{
	return x + y;
}

test.c
extern Add(int x,int y);//外部函数声明
int main()
{
	printf("%d", Add(2, 3));
	return 0;
}

const static,c++,c语言,数据结构 可以看出,跟static修饰的全局变量一样,static修饰的函数使用范围被限制了。

二、const关键字

2.1 const修饰常变量

const修饰的常变量具有常量的特性,不能被修改,但本身还是个变量。

例:const static,c++,c语言,数据结构

 这样子直接修改编译器会报错,是因为const修饰的常量是不能被直接修改的。

例:const static,c++,c语言,数据结构

这里报错是因为表示数组的元素个数必须是常量而不能是变量,这也作证了const修饰的变量本质上还是个变量。(注:在C++或者在其他比较新的C语言的标志中,const修饰的变量也可以用于表示数组的元素个数) 

2.2 const修饰指针

const static,c++,c语言,数据结构

可以看出,当遇到变量被const修饰时候,还可以通过指针的方式修改num的值,那么如果指针加上const会变得怎么样呢?

例:const static,c++,c语言,数据结构

1.当const放在*的左边的时候,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。(这里的左边,也可以是这样子放:int const* p,只要保证是*左边就可以)

但是指针变量本身的内容是可以改变的,例如:

const static,c++,c语言,数据结构 

2.const如果放在*的右边的时候,修饰的是指针变量的本身,也就是所指向内容的地址。

保证了指针变量的内容不能修改,但是指针指向的内容可以通过指针改变。

例如:const static,c++,c语言,数据结构

 2.3 const修饰函数

用const修饰函数,主要是防止在传参的时候,在被传入的函数中传入的参数被修改。

1.“值传递”

代码演示:const static,c++,c语言,数据结构

形参被const修饰,那在此函数中的n就不能再被修改,如果修改将会报错。 

2.“指针传递”

代码演示:const static,c++,c语言,数据结构

 指针传递也是如此,当形参被const修饰的时候,在该函数中这给指针就不能被修改。

2.4 const修饰指针以及函数中的具体运用

我们在编写函数的过程中,如果要写出优秀的代码,那么在编写函数的过程中就要尽量的使用const修饰,这样可以避免当我们想要传入的参数不被修改时而不小心被修改导致bug的出现,增加了代码的可用性以及目的性。

以库函数中strcpy为例子,模拟此函数:

const static,c++,c语言,数据结构

void my_strcpy(char* dest,const char* src)
{
    while (*dest++=*src++)
    {
        ;
    }
}
int main()
{
    char arr1[20] = "xxxxxxxxxxxxxxx";
    char arr2[] = "hello lin";

    my_strcpy(arr1, arr2);

    printf("%s\n", arr1);
    return 0;
}

const static,c++,c语言,数据结构

 因为我们这里的src是不想要被改变的,调用该函数的时候我们只是需要让该函数把scr的字符串拷贝到dest的字符串,为了防止在该函数中该字符串内容被改变导致出现bug,我们就可以用const去修饰该形参。文章来源地址https://www.toymoban.com/news/detail-734621.html

到了这里,关于详解const、static关键字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 重学C++系列之const与static关键字分析

            本篇幅讲解const与static,主要围绕在类的范围内叙述,包括作用和使用场景等。         1、const修饰的成员变量,成员变量初始化后不能再修改。         2、const修饰的成员函数,成员函数不可以修改成员变量,也不能间接修改。         3、static修饰的成员

    2024年02月15日
    浏览(46)
  • static,const,volatile,extern,register关键字深入解析

    ✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页:@rivencode的个人主页 🔥系列专栏:玩转C语言 💬保持学习、保持热爱、认真分享、一起进步!! 我们都知道一个源文件要生成我们计算机课执行的文件要经过: 源文件(test.c)—预编

    2023年04月08日
    浏览(35)
  • 【C++】const、static关键字和构造函数初始化

    💗个人主页💗 ⭐个人专栏——C++学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 1. const修饰成员函数 1.1 语法格式 1.2 权限放大缩小 1.3 思考 1.4 解答 2. 再谈构造函数 2.1 构造函数体赋值 2.2 初始化列表 2.3 explicit 3. static成员 3.1 静态变量 3.2 静态函数 3.3 静态成员变量

    2024年02月19日
    浏览(46)
  • 【C语言】静态关键字static的用法(详解)

     🎈个人主页:库库的里昂  🎐CSDN新晋作者  🎉欢迎 👍点赞✍评论⭐收藏  ✨收录专栏:C语言初阶  ✨其他专栏:代码小游戏  🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 【前言】 不同于其他,他们都有多种用

    2024年02月14日
    浏览(43)
  • 在C++和C中static关键字的用法,在C++和C中const关键字的用法

    1、在C++和C中static的用法 答:static表示存储类型,修饰数据类型。在C语言中,static修饰局部变量,内存分配在静态区,生命周期延长,作用域不变。static修饰全局变量,内存分配在静态区,作用域被局限于本文件,不能被extern引用。static修饰函数,不能被exter

    2024年02月10日
    浏览(41)
  • 【C语言】 Static关键字的用法和详解(太细了!!!)

    文章目录 目录 前言 一、static是什么 二、static的用法 1.修饰局部变量 2.修饰全局变量          3.修饰函数 总结   static在不同的语言中又有不同的使用方法,本文介绍的是static在 C语言 当中的用法。   static在C语言中是,中文直译过来是 “静态的” ,static在

    2023年04月14日
    浏览(43)
  • C++面试八股文:static和const的关键字有哪些用法?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第7面: 面试官:C++中, static 和 const 的有哪些用法? 二师兄: satic 主要用在以下三个方面:1.用在全局作用域,修饰的变量或者函数为静态的,限制在本文件内使用。2.方法内修饰修饰静态局部变量,在第一次访问

    2024年02月08日
    浏览(48)
  • 【C++】const关键字的详解!!

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 const是永恒不

    2024年02月03日
    浏览(42)
  • 【C】static关键字详解

    static的汉语意思是静态的,在C语言中static可以用来修饰 局部变量、全局变量和函数。 在这里给大家补充一个知识,我们的数据在内存中存储时,大概分为3个区域。 1. 栈区 :我们创建的局部变量、形参等一般就存放在这个区域,离开作用域是会自动销毁,将空间还给

    2024年02月10日
    浏览(40)
  • C++—static关键字详解

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 静态全局变量有以下特点: 1、该变量在全局数据区分配内存; 2、未经初始化的静态全局变量会被程序自动初始化为

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包