ACLGUI IN SSTC(PIA)2020中可能遇到的一些知识点

2023-11-08 14:20

本文主要是介绍ACLGUI IN SSTC(PIA)2020中可能遇到的一些知识点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

文章目录

  • (一)条件编译
  • (二)部分头文件
  • (三)空指针
    • 具体操作示例
    • 常见问题1:空指针指向了内存的什么地方?
    • 常见问题2: 在实际的操作中,如何判断某个指针是不是空指针?
    • 常见问题3:可以定义自己的 NULL 的实现吗?
  • (四)new,delete与指针
    • new创建对象
    • delete销毁对象
  • (五)ACLLIB中部分函数的使用(未完成)
  • (六)template(未完成)
  • (七)作用域与extern(未完成)
    • 局部作用域
    • 全局作用域
    • extern关键字
  • (八)简单的文件操作(未完成)

(一)条件编译

一般情况下,C语言源程序中的每一行代码.都要参加编译。但有时候出于对程序代码优化的考虑.希望只对其中一部分内容进行编译.此时就需要在程序中加上条件,让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就是条件编译(conditional compile)。

1.if格式

#if 表达式语句序列①
[#else语句序列②]
#endif

功能:当表达式的值为真时,编译语句序列①,否则编译语句序列②。其中,#else和语句序列②可有可无。

2.ifdef格式

#ifdef     标识符语句序列①
[#else语句序列②]
#endif

功能:当标识符已被定义时(用#define定义),编译语句序列①,否则编译语句序列②。其中#else和语句序列②可有可无。

3.ifndef格式

#ifndef     标识符语句序列①
[#else语句序列②]
#endif

功能:该格式功能与ifdef相反。

4.补充内容

#undef
作用:在后面取消以前定义的宏定义。
示例1:

#include <iostream.h>
#include<string.h>
#define MAX 5
#undef MAX
void main()
{char name[MAX]="abcd"; //最多四个字符,否则会提示说超出长度,原因是由于字符串末尾有'\0'字符cout<<"MAX = "<<MAX<<endl;for(int i=0;i<MAX;i++)cout<<name<<" "<<endl;
}

我们定义了MAX但又将其取消,会得到“未定义符号MAX”的错误提示。

示例2:

#include <stdio.h>
int main( void )
{
#define MAX 200printf("MAX= %d\n",MAX);
#undef MAX
#define MAX 300printf("MAX= %d\n",MAX);return 0;
}

我们可以像这样修改已经宏定义的符号常量的值。

示例3:

#define TEST_A 1
#define TEST_CLASS_A clase T1
#include "TEST.h"
#undef TEST_A
#undef TEST_CLASS_A

此段代码中,在头文件TEST.h中,这两个宏定义语句起作用,该头文件之后,它们就会释放掉。

(二)部分头文件

1.windows.h

Windows.h头文件封装了许多库函数以及一些类,将一些复杂的工作由库函数处 理,Windows.h头文件中包含了Windef.h、Winnt.h、Winbase.h、Winuser.h、Wingdi.h等头文件,涉及到了Windows内核API,图形界面接口,图形设备函数等重要的功能。
其中常用的函数包括休眠函数sleep(),清屏函数system(“cls”)等。

2.commctrl.h

一个包含大量接口的windows控件
具体内容参考commctrl.h

注:commctrl.h不能单独使用,在引入该头文件时,我们应该先加上#include<windows.h>

3.sstream

sstream,即字符串流,通常是用来做数据转换的。比如

int n=10000;
char s[10];
sprintf(s,%d”,n);// s中的内容为“10000”

详情可以参考sstream

4.ctime

见官网文献cmath

(三)空指针

空指针是一个被赋值为0的指针,在没有被具体初始化之前,其值为0。由系统保证空指针不指向任何实际的对象或者函数。同时,任何对象或者函数的地址都不可能是空指针。

具体操作示例

#define NULL 0
char *p = NULL;

注:先把要赋值的变量的地址赋给空指针,然后才能把变量的值赋给该指针。

常见问题1:空指针指向了内存的什么地方?

标准并没有对空指针指向内存中的什么地方这一个问题作出规定,也就是说用哪个具体的地址值表示空指针取决于系统的实现。我们常见的空指针一般指向 0 地址,即空指针的内部用全 0 来表示;也有一些系统用一些特殊的地址值或者特殊的方式表示空指针。
在实际编程中不需要了解在我们的系统上空指针到底是一个 zero null pointer 还是 nonzero null pointer,我们只需要了解一个指针是否是空指针就可以了——编译器会自动实现其中的转换,为我们屏蔽其中的实现细节。注意:不要把空指针的内部表示等同于整数 0 的对象表示,有时它们是不同的。

常见问题2: 在实际的操作中,如何判断某个指针是不是空指针?

可以通过与空指针常量或者其它的空指针的比较来实现(注意与空指针的内部表示无关)。
如果 p 是一个指针变量,
若进行: p = 0;、p = 0L;、p = ‘\0’;、p = 3 - 3;、p = 0 * 17; 中的任何一种赋值操作之后(对于 C 来说还可以是 p = (void*)0;),p 都成为一个空指针,并且由系统保证空指针不指向任何实际的对象或者函数。 反过来说,任何对象或者函数的地址都不可能是空指针。

指针变量 p 是空指针的判断:(假设 p 是一个指针变量,q 是一个同类型的空指针,要检查 p 是否是一个空指针)
if ( p == 0 )
if ( p == ‘\0’ )
if ( p == 3 - 3 )
if ( p == NULL ) /* 使用 NULL 必须包含相应的标准库的头文件 */
if ( NULL == p )
if ( !p )
if ( p == q )

常见问题3:可以定义自己的 NULL 的实现吗?

NULL 是标准库中的一个保留标识符。所以,如果包含了相应的标准头文件而引入了 NULL 的话,则再在程序中重新定义 NULL 为不同的内容是非法的,其行为是未定义的。

(四)new,delete与指针

在C++中,如果定义了对象,在内存中给它分配了空间;如果使用完以后,忘了销毁对象,即无法释放它所占用的内存空间。则这些内存空间一直被占用,直到重启计算机才可释放,这样就造成了内存泄露。

new创建对象

new操作符相当于一个函数,在内存分配完空间后,返回这个空间的首地址。

void main()
{  Point *p1=new Point(1,1);Point *p2=new Point(2,2);
}

delete销毁对象

用new命令可以为对象在内存中动态分配一定的空间,并返回分配空间的首地址;如果在程序运行结束之前没有用delete来销毁这些对象,释放它们所占用的空间也会发生内存泄露。

void main()
{Point *p1=new Point(1,1);Point *p2=new Point(2,2);delete p1;
}

指针p1所指向的对象因为调用了delete,则调用了析构函数,而销毁了对象;而指针p2指向的对象只是调用了new,而没有调用delete,没有被销毁,则发生了内存泄露。

因此,用new创建的对象都应当在程序内及时销毁。

(五)ACLLIB中部分函数的使用(未完成)

ACLLIB

(六)template(未完成)

函数模板定义一族函数。它声明一个通用的类模板,使之可以有一个或多个虚拟的类型参数。
函数模板的格式:

template< class T>(此处的T也可以用别的标识符替代)
prototype

函数模板在形式上分为两部分:模板、函数。在函数前面加上 template< class T>就成为函数模板,因此对函数的各种修饰(inline、constexpr 等)需要加在prototype上,而不是 template 前。

(七)作用域与extern(未完成)

局部作用域

全局作用域

对于对象而言(其他也是一样的),在main函数中,对象的作用域为他所在的最近的一对花括号内。在后花括号处析构函数被调用;全局的对象的作用域为声明之后的整个文件,析构函数在最后被调用。另外,临时产生的对象在使用完后立即会被析构。

extern关键字

extern

(八)简单的文件操作(未完成)

这篇关于ACLGUI IN SSTC(PIA)2020中可能遇到的一些知识点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/370453

相关文章

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa