首页 > 其他分享 >如何征服工程题

如何征服工程题

时间:2024-05-16 22:08:13浏览次数:11  
标签:存储 const 变量 工程 int 局部变量 征服 如何 指针

众所周知,在 THU 系列夏令营/冬令营中往往会碰到一些要求手搓 cpu 的工程题。所以你需要学会一些面向对象编程的技巧。

当然下面讲的完全不是面向对象编程。

语言基础

先上网址:cppreference

C++ 程序是由声明构成的。

全局变量的定义、函数的定义都是声明。

变量

抽象的就不写了,写实用的。

全局变量存储在静态存储区,任何函数都可以使用声明在其上的全局变量。

局部变量分为自动存储期局部变量静态局部变量,我们经常使用的是前者。

自动存储期局部变量在每次访问到其定义时初始化,存储在栈空间中。

静态局部变量相比于前者,声明时要加上存储类说明符 static,类似于全局变量,存储在静态存储区

Warning

静态局部变量只在第一次访问到其定义时初始化,此后不再初始化

因此,对于如下一段代码:

int cnt=0;
for(int i=1;i<=10;i++){
	static int x=cnt;
    cnt++;
	printf("%lld %lld\n",x,cnt);
}

输出为

0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
0 10

注意,这并不代表 static 不可以被更改。

存储类说明符 const 代表将变量视为常量,其声明的变量必须立刻被初始化为常量表达式

类型

void 是值集为空的类型,不能有 void 类型的变量,但是可以有指向 void 的指针void 类型的函数。

指针

指针主要用来存放对象或函数的内存地址。

众所周知,变量的定义形式为:

类型说明符 声明符

声明符相当于变量的名字。

而指针的定义形式类似:

类型说明符* 声明符

所以指针也是有类型的,指针的类型就代表它存放什么类型的对象地址

注意,如果需要存放 const int 类型的变量地址,你就需要定义指针:

const int * p

但是,如果是下面这种情况:

int * const p

意思就不一样了。在类型说明符后面加 const 代表该变量/指针不能被修改

于是你可以写出这样的代码:

const int const *p

在定义指针的地方之外使用 * 代表访问该指针指向的地址上的元素,& 代表取变量的地址。

指针也可以像数组一样用下标访问元素,注意,访问的是元素。

p[i]=i[p]=*(p+i)

其中 p 为指针,i 为整数,代表访问 p+f(i) 这个地址上的元素值。f(i) 为 \(i\times \operatorname{sizeof}(i)\)。

于是我们自然而然地就有一个疑问,指向 char 的指针能不能通过上面的操作得到 int 的元素呢?

不知道。

如果要获取函数的指针,你可以这么做:

function_typename function(typename1 variable1,typename2 variable2,……,typenamen variablen){
    //something
}
int main(){
    function_typename (*p)(typename1,typename2,……,typenamen)=function;
}

虽然没啥用。

标签:存储,const,变量,工程,int,局部变量,征服,如何,指针
From: https://www.cnblogs.com/BYR-KKK/p/18196842

相关文章

  • 如何使用 JS 判断用户是否处于活跃状态
    有时候,我们需要在网页判断用户是否处与非活跃状态,如果用户长时间没有在页面上进行任何操作,我们则判定该用户是非活跃的。在javascript中我们可以通过监听某些鼠标或键盘相关的事件来判定用户是否在活跃中。案例演示在线演示-使用JS判断用户是否处于活跃状态实现代码案......
  • redis如何实现主从同步
    redis实现主从同步分为两种:全量同步和增量同步:第一次连入集群的slave需要进行全量同步,那些断开后重连的slave需要进行增量同步每个redis都有自己的replid,他们是master的标识,在尚未搭建集群之前,每个redis都是master,因此大家都有各自不同的replidrepl_backlog中会写入所有操作的命......
  • 如何使用 JS 判断用户是否处于活跃状态
    有时候,我们需要在网页判断用户是否处与非活跃状态,如果用户长时间没有在页面上进行任何操作,我们则判定该用户是非活跃的。在javascript中我们可以通过监听某些鼠标或键盘相关的事件来判定用户是否在活跃中。案例演示在线演示-使用JS判断用户是否处于活跃状态实现代码案......
  • macOS开发,如何设置动态桌面壁纸(动态壁纸酷)
    1.首先要先建立一个全屏的窗口1//获取窗口控制器2NSStoryboard*storyboard=[NSStoryboardstoryboardWithName:@"Main"bundle:[NSBundlemainBundle]];3WallpaperWindowController*wwc=[storyboardinstantiateControllerWithIdentifier:@"AboutWindowController......
  • YouCompleteMe如何获得未使用的端口
    intro由于每次vim都启动一个ycmd服务进程,并且端口地址是由vim客户端指定的(因为ycmd启动之后vim客户端需要连接过去),所以vim在指定端口的时候就需要给出一个当前没有使用中的端口。那么如何获得一个未使用的端口呢?tsecer@harry:psaux|fgrepycmdtsecer+30220840.92.5......
  • 美团面试:如何实现线程任务编排?
    线程任务编排指的是对多个线程任务按照一定的逻辑顺序或条件进行组织和安排,以实现协同工作、顺序执行或并行执行的一种机制。1.线程任务编排VS线程通讯有同学可能会想:那线程的任务编排是不是问的就是线程间通讯啊?线程间通讯我知道了,它的实现方式总共有以下几种方式:Object......
  • 如何评估战略执行软件的投资回报率
    通过我们关于计算战略执行软件投资回报率的基本指南,最大化您的投资。学习量化软件的价值!评估任何解决方案的投资回报(ROI)都是最佳业务实践,对战略执行软件进行评估也不例外。许多组织使用这项技术来改进运营和决策。然而,准确确定投资回报率需要了解有形和无形收益。这篇文章将......
  • unapp里边如何打开小程序
    1、先配置小程序 2、配置hbuild里边的基础配置,注册hbuild然后在配置微信小程序 配置完成后就可以重启HBuild在微信小程序中打开了 ......
  • 教你如何搞定springboot集成kafka
    本文分享自华为云社区《手拉手入门springboot+kafka》,作者:QGS。安装kafka启动Kafka本地环境需Java8+以上Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。Kafka启动方式有Zookeeper和Kraft,两种方式只能选择其中一种启动,不能同时使用......
  • 如何将pdf转换成ppt?这3种方法简单实用!
    PDF是一种常见的文档格式,而PPT则是一种常见的演示文稿格式。有时候,我们需要将PDF文件转换成PPT格式,以便在演示或展示中使用。下面,介绍pdf怎么转换成ppt的3种方法。一、使用在线转换工具这种方法是最简单、最快捷的方式之一。有很多在线工具都可以免费将PDF转成PPT,例如smallpdf中......