C++典型例题切入数据存储

news2024/10/6 22:33:11

一、典例导入 

int globalVar = 1;
static int staticGlobalVar = 1;
void Test()
{
	static int staticVar = 1;
	int localVar = 1;

	int num1[10] = {1, 2, 3, 4};
	char char2[] = "abcd";
	char* pChar3 = "abcd";
	int* ptr1 = (int*)malloc(sizeof (int)*4);
	int* ptr2 = (int*)calloc(4, sizeof(int));
	int* ptr3 = (int*)realloc(ptr2, sizeof(int)*4);
	free (ptr1);
	free (ptr3);
}

1. 选择题:

  选项: A.栈 B.堆 C.数据段(静态区) D.代码段(常量区)

  globalVar在哪里?____  staticGlobalVar在哪里?____

  staticVar在哪里?____  localVar在哪里?____

  num1 在哪里?____

  char2在哪里?____   *char2在哪里?___

  pChar3在哪里?____   *pChar3在哪里?____

  ptr1在哪里?____    *ptr1在哪里?____

2. 填空题:

  sizeof(num1) = ____;  

  sizeof(char2) = ____;   strlen(char2) = ____;

  sizeof(pChar3) = ____;   strlen(pChar3) = ____;

  sizeof(ptr1) = ____;

二、地址空间

三、逐个解析

3.1 选择题

globalVar在哪里?数据段 C

staticGlobalVar在哪里?数据段 C

staticVar在哪里?数据段 C

  • 全局变量(包括被 static 修饰的):无论是否使用 static 修饰,全局变量都存储在数据段。不过,static 关键字限制了全局变量的可见性,仅在声明它的文件内可见。这意味着,尽管静态全局变量在数据段中,但它们不能被程序中其他文件直接访问。
  • 已初始化的静态全局变量:存储在数据段的 .data 部分。
  • 未初始化或初始化为零的静态全局变量:为了节省空间,通常存储在 .bss 部分,该部分在程序启动时被清零。

localVar在哪里?栈区 A

  • 局部变量(被 static 修饰):这些变量虽然在其所在函数的作用域外不可见,但由于 static 修饰符的作用,它们实际上存储在数据段中,而不是通常存放局部变量的栈上。这样它们就能在函数调用之间保持状态,不会像其他自动存储期变量那样在函数调用结束时丢失值。
  • 局部变量(未被 static 修饰):存放在栈区。
  • 已初始化的静态局部变量:类似于静态全局变量,存储在 .data 部分。
  • 未初始化或初始化为零的静态局部变量:存储在 .bss 部分。

 

 num1 在哪里? 栈区 A

num1是数组名,指的是整个数组,数组成员都是临时变量,存放在栈中。

 char2在哪里? 栈区 A

char2 和 num1 的情况类似,虽然后面是一个字符串,存放在代码区,但是系统会在栈上开辟一段空间存放拷贝的 "abcd\0" ,char2 代表整个数组,存放在栈区:

*char2在哪里? 栈区 A 

char2 指向的是数组的首元素,对 char2 解引用拿到的是数组的首元素,整个数组都存放在栈区中,故 *char2 也在栈区中:

 pChar3在哪里? 栈区 A

pChar3 是指针,其指向代码段的常量字符串,但是它也是临时变量,存放在栈区中:

*pChar3在哪里? 代码区 D

pChar3 指向代码段的常量字符串,故对其解引用拿到的是常量字符串的首字符:

ptr1在哪里?栈区 A 

ptr1 和 pChar3 类似,他们都是作为指针出现的临时变量,故存放在栈区。

*ptr1在哪里?堆区 B

ptr1 指向的是一块 malloc 的空间, malloc 的空间存放在堆区,故对其解引用拿到的是堆区的空间。

3.2 填空题

sizeof(num1) = ____;  40 

int类型4byte,个数10,sizeof(nums1) = 4 * 10 = 40

sizeof(char2) = ____;  5

sizeof 统计时会统计 \0

strlen(char2) = ____;  4

strlen 统计时不会统计 \0

sizeof(pChar3) = ____;  4/8

pChar3 是指针,指针的大小在32位或64位机器上有差别,但一定是 4/8

strlen(pChar3) = ____;

pChar3 保存的是字符串 "abcd" 第一个字符 'a' 的内存地址,故 strlen 为 4

  sizeof(ptr1) = ____;

ptr1 是指针,同 pChar3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1583385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言面试题之返回倒数第 k 个节点

返回倒数第 k 个节点 实例要求 1、实现一种算法,找出单向链表中倒数第 k 个节点;2、返回该节点的值; 示例:输入: 1->2->3->4->5 和 k 2 输出: 4 说明:给定的 k 保证是有效的。实…

新平台上线需要注意哪些?

最近有很多被黑客攻击的老板问我前期平台上线安全防护方面需要注意哪些?下面就给大家讲一下。1、如果前期不打算上高防产品,数据一定要做好备份,否则一旦数据被篡改或者被加密,恢复都是比较困难的,甚至都没有办法恢复。…

亚马逊国际获得AMAZON商品详情 API ,item_get-获得AMAZON商品详情

亚马逊提供了多种API和服务,允许开发者获取商品详情和其他相关信息。然而,直接使用亚马逊的API通常需要遵循一定的步骤和条件,包括注册为亚马逊开发者、创建应用并获取API密钥等。 请求示例,API接口接入Anzexi58 关于你提到的“i…

[Java基础揉碎]System类

1) exit 退出当前程序 2) arraycopy: 复制数组元素,比较适合底层调用,一般使用 Arrays.copyOf完成复制数组(Arrays.copyOf其实底层也是用的System.arraycopy, 本质是一样的) int[] src{1,2,3}; int[] dest new int[3]; System.arraycopy(src, 0, des…

想往智能驾驶方向发展,需要做哪些努力

想往智能驾驶方向发展,需要做哪些努力 附赠自动驾驶学习资料和量产经验:链接 目前自动驾驶主要涉及到以下几个方面: 1.传感器技术(激光雷达,毫米波雷达,摄像头,超声波雷达)&#x…

【笔试】02

TCP TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议 它能够提供以下服务: 可靠传输 通过序列号、确认应答、重传机制等确保数据完整、准确地从发送端传输到接收端。 三次握手: 点对点全双工面向字节流…

final、finally、finalize的区别

final final就是不可变的意思,可以修饰变量、⽅法和类。修饰变量时,这个变量必须初始 化,所以也称为常量。 被final修饰的类不能被继承 如果一个变量被final修饰,就需要初始化。可以在声明的时候赋值,或者在每一个构…

Linux_进程的优先级环境变量上下文切换优先级队列

文章目录 一、进程的优先级二、进程的四个重要概念三、上下文切换四、环境变量查看当前shell环境下的环境变量与内容 五、Linux2.6内核进程调度队列一个CPU拥有一个runqueue优先级活动队列过期队列active指针和expired指针 一、进程的优先级 什么是优先级? 指定一个…

第十一届蓝桥杯省赛真题(C/C++大学B组)

试题A &#xff1a;门牌制作 #include <bits/stdc.h> using namespace std;const int N 100000; int arr[N];int main() {int ans 0,t;for(int i 1;i < 2020;i){t i;while(t > 0){if(t % 10 2) ans;t / 10;}}cout<<ans<<endl;return 0; } 试题B …

返回头节点的问题

当需要对链表进行操作又需要返回头节点时&#xff0c;又可能被更改的节点正是头节点 解决方法&#xff1a; 让一个指针事先指向头节点&#xff0c;然后从该指针开始操作就好了 class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {if(headNULL)ret…

【Linux】make是如何判断可执行文件是否需要重新编译呢?(ACM时间)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

express操作mysql数据库的方法总结

作为前端&#xff0c;我们无需去考虑数据库的问题&#xff0c;业务场景需要的话&#xff0c;我们可以mock数据&#xff0c;满足暂时的联调场景。但是对于数据库&#xff0c;我们前端可以不用&#xff0c;却不能不了解不懂。所以这篇文章整理下&#xff0c;nodejs框架express中怎…

[闲聊统计]之参数估计是什么?(上)

参数估计是推断统计的重要内容之一。它是在抽样及抽样分布的基础上&#xff0c;根据样本统计量来推断所关心的总体参数。说白了&#xff0c;就是用样本信息来代替总体信息 例如&#xff1a;现在要调查某大学大学生的一个消费情况&#xff0c;假设全校大学生的平均消费金额为 μ…

pycharm一直打不开

一直处在下面的页面&#xff0c;没有反应 第一种方案&#xff1a; 以管理员身份运行 cmd.exe&#xff1b;在打开的cmd窗口中&#xff0c;输入 netsh winsock reset &#xff0c;按回车键&#xff1b;重启电脑&#xff1b;重启后&#xff0c;双击pycharm图标就能打开了&#xf…

[lesson17]对象的构造(上)

对象的构造(上) 对象的初始化 从程序设计的角度&#xff0c;对象只是变量&#xff0c;因此&#xff1a; 在栈上常见对象时&#xff0c;成员变量初始为随机值在堆上创建对象时&#xff0c;成员变量初始为随机值在静态存储区创建对象时&#xff0c;成员变量初始为0值 生活中的对…

fast_bev 学习笔记

目录 一. 简述二. 输入输出三. github资源四. 复现推理过程4.1 cuda tensorrt 版 训练修改图像数 一. 简述 原文:Fast-BEV: A Fast and Strong Bird’s-Eye View Perception Baseline FAST BEV是一种高性能、快速推理和部署友好的解决方案&#xff0c;专为自动驾驶车载芯片设计…

langchain 使用本地通义千问

langchian 使用已经下载到本地的模型&#xff0c;我们使用通义千问 显存&#xff1a;24G 模型&#xff1a;qwen1.5-7B-Chat&#xff0c;qwen-7B-Chat 先使用 qwen-7B-Chat&#xff0c;会报错用不了&#xff1a; 看了下是不支持这中模型&#xff0c;但看列表中有一个 Qwen 字样…

三种常见webshell工具的流量特征分析

又来跟师傅们分享小技巧了&#xff0c;这次简单介绍一下三种常见的webshell流量分析&#xff0c;希望能对参加HW蓝队的师傅们有所帮助。 什么是webshell webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境&#xff0c;主要用于网站管理、服务器管理、…

基于SSM+Jsp+Mysql的快递管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

如何将PHP的Webman框架打包成二进制文件运行

看了看webman的官方文档&#xff0c;发现居然还能打包为二进制&#xff0c;这样太厉害了吧&#xff01; 先执行这个 composer require webman/console ^1.2.24 安装这个console的包&#xff0c;然后 执行 php webman build:bin 8.1 结果谁想到它报错提示&#xff1a; 好…