首页 > 其他分享 >C语言——static 关键字与 const 关键字

C语言——static 关键字与 const 关键字

时间:2024-10-08 20:48:19浏览次数:14  
标签:const int 关键字 num static 修饰 全局变量

static 静态的

        一、static 修饰局部变量——称为静态局部变量

                static改变了局部变量的生命周期(本质上是改变了变量的存储类型),当被static修饰时,局部变量由栈区存放到了静态区。

void test()
{
    int num = 1;
    printf("%d ", num++);
}
void test1()
{
    // static修饰局部变量——称为静态局部变量
    static int num = 1;
    printf("%d ", num++);
}
int main()
{
    for (int i = 0; i < 10; i++)
    {
    test();
    }
    // 打印:1 1 1 1 1 1 1 1 1 1
    printf("\n");
    for (int i = 0; i < 10; i++)
    {
    test1();
    }
    // 打印:1 2 3 4 5 6 7 8 9 10
    return 0;
}

        二、static  修饰全局变量——-称为静态全局变量

                static修饰的全局变量,使得这个全局变量只能在自己所在的源文件(.C)内部可以使用,其他源文件不能使用

                本质:全局变量在其他源文件内部可以被使用,是因为全局变量是具有外部链接属性,但是被static修饰后,就变成了内部链接属性

                实例:

                此时在工程文件中创建了两个(.c)文件并且在(test2.c)中创建了一个全局变量,再回到(test.c)中并声明外部符号,此时(test.c)中是没有变量(num)的,运行文件可以发现还是打印了(test2.c)中的(num)

                现在回到(test2.c)中在(num)前加上 static 关键字后,再回到(test.c)中运行,就会运行出错——无法解析外部命令 

        三、Static  修饰函数——称为静态函数 

                static修饰函数后,使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用

                本质上,static是将函数的外部链接属性变成了内部链接属性,和static修饰全局变量一样,因此这里就不过多介绍了

 

const 关键字 

const修饰的变量具有常量属性,理论上不可以被修改 

        一、const修饰普通变量 

int main() 
{
    int num = 10;
    num = 20;// true
    
    // const修饰的变量具有常量属性,不可以被修改
    const int num = 10;
    num = 20;// false
    return 0;
}

         二、const修饰指针变量

        const 放置于 * 左边 const int* p

        表示:p 指向的对象不能通过p来改变,但是p变量本身的值是可以

        const 放置于 * 右边 int* const p

        表示:p 指向的对象可以通过p来改变,但是p变量本身的值是不可以改变的

int main()
{
    // const修饰指针变量有两种情况
    // const 放置于 * 左边 const int* p
    // const 放置于 * 右边 int* const p
    
    int num1 = 10;
    int num2 = 20;
    // const 放在 * 的左边
    //表示:p 指向的对象不能通过p来改变,但是p变量本身的值是可以改变的。
    const int* p = &num1;
    *p = 20;//err
    *p = &num2;//yes

    // const 放在 * 的右边
    //表示:p 指向的对象可以通过p来改变,但是p变量本身的值是不可以改变的。
    int* const p = &num1;
    *p = 20;//yes
    *p = &num2;//err 
	
	return 0;
}

标签:const,int,关键字,num,static,修饰,全局变量
From: https://blog.csdn.net/LVZHUO_2022/article/details/142732593

相关文章

  • synchronized关键字的使用和原理
    在Java中,synchronized关键字是一种用于实现线程同步的机制,它可以确保在同一时刻只有一个线程能够访问被synchronized修饰的代码块或方法。一、作用和原理互斥访问:synchronized关键字通过对共享资源加锁来实现互斥访问。当一个线程进入synchronized代码块或方法时,它会获取......
  • C++ day03(作用域限定符、this、static、const)
    目录【1】作用域限定符::1》名字空间2》类内声明,类外定义 【2】this关键字1》概念2》调用成员3》区分重名的成员变量与局部变量4》链式调用 【3】static关键字1》静态局部变量2》静态成员变量3》静态成员函数【4】const关键字1》修饰成员函数2》修饰对象 ......
  • 【Azure Cloud Service】创建Azure云服务时遇见分配VM资源错误: VM(s) with the follo
    问题描述创建AzureCloudService资源,遇见资源操作完成时的终端预配状态为Failed的信息。创建失败,创建的错误日志截图如下: 详细的错误信息为:{"code":"DeploymentFailed","message":"Atleastoneresourcedeploymentoperationfailed.Pleaselistdeploymentoperati......
  • 了解final关键字在Java并发编程领域的作用吗?
    在Java并发编程领域,final关键字扮演着一个至关重要的角色。虽然很多同学熟悉final用于修饰变量、方法和类的基本用法,但其在并发环境中的应用和原理却常常被忽视。final关键字不仅仅是一个简单的修饰符,它在多线程编程中确保对象状态的可见性和不变性,这对于构建线程安全的应用至关重......
  • static静态方法的使用
    //测试类,用来执行代码packagehomework;importjava.util.Scanner;publicclassTest{publicstaticvoidmain(String[]args){int[]a={4,5,3,6,8,1};//自己初始化数组int[]b=newint[10];//自行输入数组数字Scannerscanner=newScanner(System.in);inti=0;//输入......
  • uniapp - HBuilderX运行到内置浏览器编译报错 ublic static TextAppearance_Holo_Smal
    前言网上的教程都无法解决问题,本文提供强力解决方案。在uniappH5网页开发中,报错提示:ublicstaticTextAppearance_Holo_Small:number;|SyntaxError:Unexpectedidentifier,非常恶心的错误,手机H5网站项目点击运行到内置浏览器后,瞬间报错且无法编译提示已停止运行,H5......
  • C++ explicit&noexcept关键字
    C++explicit&noexcept关键字explicit关键字在C++中,explicit关键字用于避免编译器在特定情况下进行隐式类型转换。它主要作用于构造函数和转换函数,防止不必要或意外的类型转换发生,从而提高代码的安全性和可读性。1.作用于构造函数当一个构造函数只接受一个参数时,它通常会......
  • c++之auto关键字的注意点(涉及decltype)
    1.基本规则auto会根据初始化表达式的类型推导出变量的类型。如果初始化的是值类型,auto推导出的也是值类型。如果初始化的是引用类型,auto会忽略引用类型,并推导出被引用对象的类型。如果初始化表达式是常量(const),且auto不是引用类型,推导出的类型会去掉const限定符。vo......
  • 帝国cms搜索页模板关键字结果标题加红的方法
    要在帝国CMS的搜索结果页面上实现关键词高亮显示的功能,可以按照以下步骤操作:备份原有模板文件:在修改任何模板文件之前,请确保备份原有的模板文件,以防修改出错时能够恢复。定位到模板编辑器:登录帝国CMS后台。导航至“模板”->“模板列表”。找到需要修改的搜索列表模板文......
  • 关键字:const
    const关键字const关键字也许应该被替换成readonly(只读);1.1const修饰变量const修饰的变量,不可直接被修改——但是可以间接修改,使用指针那么const修饰变量的意义在哪里?(const修饰变量的本意是不让他修改,可是却可以绕开变量,使用指针修改,那么意义何在?)答:1.const修饰变量,这个关键......