众所周知,在 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