嵌入式学习day12

每日面试题

static 关键字在 全局变量、局部变量、函数的区别?

全局变量+static:改变作用域,改变(限制)其使用范围。
只初始化一次,防止在其他文件单元中被引用。全局变量的作用域是整个源程序,在各个源文件中都是有效的,而加了静态后的全局变量的作用域仅限于一个源文件中。
局部变量+static:普通的局部变量是在函数或方法执行完毕后释放存储空间,而静态局部变量在程序开始执行时分配存储空间,直到程序结束才释放。这意味着即使函数或方法执行完毕,静态局部变量的值仍然会保留,并在下一次函数调用时保持其值。
普通函数+static:作用域不同,仅在本文件。

程序的内存分配

  1. 栈区:由编译器进行管理,自动分配和释放,存放的是函数调用过程中的各种参数,局部变量,返回值以及函数返回地址。
  2. 堆区:用于程序动态申请分配和释放空间,malloc和free,程序员申请的空间在使用结束后应该释放,否则程序自动收回。
  3. 全局(静态)存储区:分为DATA(已经初始化),BSS(未初始化)段,DATA段存放的是全部变量和静态变量;BSS(未初始化)存放未初始化的全局变量和静态变量。程序运行结束后自动释放,其中BSS(全部未初始化区)会被系统自动清零。
  4. 文字常量区:存放常量字符串,程序结束后由系统释放。
  5. 程序代码段:存放程序的二进制代码。

每日算法

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

class Solution {
public:
    ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
        ListNode* p = headA;
        ListNode* q = headB;
        int lenA = 0;
        int lenB = 0;
        while (p != NULL) {
            lenA++;
            p = p->next;
        }
        while (q != NULL) {
            lenB++;
            q = q->next;
        }
        p = headA;
        q = headB;
        if (lenA < lenB) {
            swap(lenA, lenB);
            swap(p, q);
        }
        int gap = lenA - lenB;
        while (gap--) {
            p=p->next;
        }
        while (p != NULL) {
            if (p == q)
                return p;
            p = p->next;
            q = q->next;
        }
        return NULL;
    }
};
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值