每日一题gogogo

今天的每日一题来源于真实的企业场景

局部变量能否和全局变量重名?

可以重名,当两者重名的时候,会触发变量遮蔽:在局部变量的作用域内,局部变量拥有更高的优先级,全局变量会被隐蔽,直接使用该变量只会访问局部变量(就近原则)

如何引用一个已经定义过的全局变量?

~同一文件内引用

如果全局变量定义在文件的后半部分,或者为了代码结构清晰,在函数前使用该变量,需要提前通知编译器

方法:使用extern关键字,或者直接在使用前完成变量定义

cs 复制代码
#include <stdio.h>
void print_val(void)
{
    extern int g_val;
    printf("g_val = %d\n",g_val);
}

int g_val = 42;

int main(void)
{
    print_val();
    return 0;
}

~跨文件(多源文件)引用(最常见)

在工程开发过程中,全局变量通常定义在一个源文件(.c)中,.c文件共同访问

在var.c中定义变量(分配内存)

cs 复制代码
int g_shared_count = 100; //定义,分配实际内存

在var.h中用extern声明(不分配内存)

cs 复制代码
#ifndef VAR_H
#define VAR_H

extern int g_shared_count;  //声明,告诉外部存在此符号

#endif

在需要使用的main.c中包含头文件

cs 复制代码
#include <stdio.h>
#include "var.h"

int main(void)
{
    printf("共享变量:%d\n,g_shared_count);
    g_shared_count+=10;
    printf("修改后:%d\n",g_shared_count);
    return 0;
}

全局变量可不可以以定义在可被多个.c文件包含的头文件中?为什么?

计算机底层C语言并不是"先有一个全局总管,再分配给各个文件"

他的流程是分步的

第一步:每个.c都是各做各的,互不通气,假设你的头文件写了 int a = 10;并且file1.c file2.c都包含了

file1.c 编译时,他只看到了自己眼前的文件,看到int a = 10;,申请4个字节的内存,取名叫a,分配的地址是0x1000

file2.c编译时,它也申请4个字节的内存,地址是0x2000

这样,内存里面已经实实在在被造出两个互不相关的独立变量

第二步:链接器来收工时

打包员需要把他们拼成一个app.exe

打开这两个包时,都有这个叫a的变量,但是各自建了一个不同的内存地址,直接报错罢工

如何解决:

只有一个文件负责造实体 其他的文件负责寻人启事(extern)

队列和栈有什么区别:

元素进出的顺序规则与操作端点的限制

核心维度 栈(Stack) 队列(Queue)
操作原则 LIFO(Last In, First Out,后进先出) FIFO(First In, First Out,先进先出)
操作端点 单端操作(栈顶 Top 插入与删除) 双端操作(队尾 Rear 入队,队头 Front 出队)
形象比喻 往弹匣装子弹、叠盘子(最后放的最先拿) 排队买票、管道流水(先来的先服务)
常见操作 push(入栈)、pop(出栈)、peek/top(查看栈顶) enqueue(入队)、dequeue(出队)、front(查看队头)
典型应用 函数调用栈、括号匹配、浏览器"后退"、Undo/Redo 任务调度、消息队列、打印机作业缓冲、广度优先搜索(BFS)
算法对应 深度优先搜索(DFS)、回溯算法 广度优先搜索(BFS)
相关推荐
User_芊芊君子1 小时前
sbt 鸿蒙 PC 适配全记录:从 JVM 构建工具到 HAP_HNP 交付闭环
jvm·华为·harmonyos
天空之城--18 小时前
Flutter Drift 完全指南:从原理到实战
jvm·flutter·oracle
xiaohua10091 天前
JVM内存优化-jemalloc
java·jvm
Escalating_xu1 天前
【mmap 进程间通信】从共享内存到跨进程唤醒:用互斥锁、条件变量控制多个进程
java·linux·开发语言·jvm
雪落漂泊1 天前
C++智能指针
开发语言·jvm·c++
落魄大学生之流水线上谋生计1 天前
JVM内存结构、垃圾回收算法与类加载机制详解
jvm·算法
wuminyu1 天前
Kafka配置TLS/SSL加密传输时零拷贝失效分析
java·linux·c语言·jvm·c++
0+1112 天前
Linux --线程概念与控制
linux·运维·服务器·jvm
瀚高PG实验室2 天前
瀚高数据库V9.0.5数据脱敏完整配置步骤
jvm·数据库·postgresql·瀚高数据库