编导期末卷

2024-05-31 08:58
文章标签 期末 编导

本文主要是介绍编导期末卷,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编导期末复习

选择

++a 和 a++
n1 = a++;  //a赋值后自增
n2 = ++a;  //a先自增后赋值
运算符的优先级
第一  ++ --  !
第二 * / %
第三 + -
第四  = !=
第五 && || ?:(三目运算)
*地址

1.int a 表示一个内存空间,这个空间用来存放一个整数

2.int *a 表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间

3.int ** a 表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放指针的空间,指向这个空间的指针指向一个整数

4.int (*a)[4] 表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个长度为4,类型为int的数组

和int* a的区别在于 ++ ,+=1之后的结果不同

5.int(*a)(int) 表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个函数,这个函数有一个类型为int的参数,并且函数的返回值类型也是int

指针数组和数组指针

int * p[] 和 int(*p) []

int *P []是指针数组,全部元素为指针的数组

int(*q)[] q是一个指针,指向int[4]的数组

动态内存分配
1.静态开辟内存

例如

int a;
int a[10];

//栈就是指数据暂时存储的地方,所以才有进栈、出栈的说法。

静态开辟内存是固定大小,全局数组内存是在编译时分配好的,如果是局部变量数组,运行是在栈上静态分配的。

但无论是全局数组还是局部数组,都有一个固定的特点,就是他们大小是固定的,且是代码写死的。

如果想在运行时才定义一个数组的大小显然是不可能的。

比如:

int a;
cin>>a;
inta[a];

这样编译时会报错,编译器会提示[]中应为常量表达式

在c中有以下几种定义数组的方法

#define  N 10
enum NUM{M = 10
};
int a1 [N];
int a2[10];
int a3[M];

!!!C中const int n =10 ; n并不能作为数组长度定义数组 , 但C++中则可以 .

2.动态开辟内存

在c中动态开辟空间需要用到三个函数:

malloc()

calloc()

realloc()

这三个都是向堆中申请的内存空间

在堆中申请的内存空间不会像在栈中储存的局部变量一样,函数调用完会自动释放。

需要我们手动释放,就需要free()函数来完成。

几个函数的特点如下

1.malloc()

void *malloc (size_t size)

1.malloc()函数会像堆中申请一片连续的可用空间

2,若申请成功,返回指向这片内存空间的指针,若失败,则会返回NULL,所以我们在用malloc()函数开辟动态内存之后,一定要判断函数返回值是否为NULL

3.返回值的类型为void型,malloc()函数并不知道连续开辟的size个字节是储存什么类型的数据,所以需要我们自行决定,方法是在malloc()前加强制转换,转化为我们需要的类型。如(int*)malloc(sizeof(int)*)

4.如果size为0,此行为是未定义的,会发生未知错误

实例如下

int *p = NULL;
int n = 0;
cin >> n;
p = (int*)malloc(sizeof(int) * n);
if(p != NULL){//....需要进行的操作
}

这样相当于创建了一个数组p[n],这个n值不用跟普通数组一样必须是变量,可以使运行程序时得出,或是用户输入的。

2.free()

void free(void* ptr)

在堆中申请的空间不会像我们在栈上储存的局部变量一样,函数调用完会自动释放内存,如果我们不手动释放,直到程序运行结束才会释放,这样会造成内存泄漏,即堆中这片内存中的数据已经不在使用,但它还一直占用这片空间,所以当我们申请的动态内存不在使用时,一定要及时释放

ps:free不能重复释放一块内存

free()的具体用法

int *p = NULL;
int n = 0;
cin >> n;
p = (int*)malloc(sizeof(int)*n);
if(p!=NULL){//需要执行的操做
}
free(p);
p = NULL;
3.calloc()

void * calloc(size_t num,size_t size)

和malloc()函数的区别在于,calloc()函数会在返回值之前将所有申请的内存空间中每个字节都初始化为0

1.calloc()函数功能是动态分配num个字节大小的size内存空间

2.若申请成功,返回值指向这片内存空间的指针,若失败,则会返回NULL,所以我们在用calloc()函数开辟动态内存之后,一定要判断函数返回值是否为NULL

3.返回值的类型为void型,callic()函数虽然分配num个size大小的内存空间,但还是不知道存储什么类型数据,所以需要我们自行决定,方法是在calloc()前加强制转化,转化成我们所需类

eg:(int*)calloc(num,sizeof(int))

4.如果size与num有一个或者都为0,此行为是未定义的,会发生未知错误

所以如果我们对申请的内存空间的内容要求初始化,那么可以很方便的使用calloc函数来完成这个需求。

4.realoc()

void * realloc(void * ptr,size_t size)

realloc()函数让动态内存管理更加灵活,在程序运行过程中分配内存大小,如果分配的太大,浪费空间,太小的话可能不够用,为了合理运用内存,我们一定会对内存的大小做灵活处理。那realloc()函数就可以做到对动态开辟内存大小的调整(可调大或者调小)

1.ptr为需要调整的内存地址

2.size为调整后需要的大小(字节数)

3.若调整成功,返回值为调整大小后内存的起始位置(也就是指向调整后内存的指针),若失败(当没有内存可以分配时,一般不会出现)则返回NULL,所以还是要对返回值判空

4.如果ptr是空指针,则和malloc()函数作用一样

注意 : realloc()函数在扩大内存空间时有两种情况
1).ptr所指的内存后有足够的内存空间用来扩展 ,如图 :
在这里插入图片描述

2).ptr所指内存后没有足够的空间来扩展 ,如图 :

在这里插入图片描述

当第二种情况时, 若申请新的内存空间成功, 会将ptr所指向的内存中的内容拷贝到新的内存空间中, ptr所指向的内存会被释放, 返回新得内存地址, 若不成功 ,ptr 所指内存不会被释放, 函数返回NULL

注意

1.malloc()和calloc()函数用法一样,唯一的区别是calloc()会对所申请的内存的每个字节初始化为零

2.malloc(),calloc(),realloc()申请的内容不在使用时,一定要用free()释放,否则会造成内存泄漏

3.p = realloc(ptr,size)函数的返回值不能为空时,释放内存时不需要写free(ptr),只需要写free(p)

判断

1.复合语句

复合语句包含封闭在大括号 ({ }) 中的零个或多个语句。可以在任何期望语句出现的位置使用复合语句。 复合语句通常称为“块”

eg:

if( Amount > 100 )
{cout << "Amount was too large to handle\n";Alert();
}
else
Balance -= Amount;
2.continue

当遇到 continue 时,出现在它之后的循环体中的所有语句都被忽略,循环准备下一次迭代。

int testVal = 0;
while (testVal < 10)
{testVal++;if (testVal) == 4continue; //终止循环的该次迭代cout << testVal << " ";
}

结果是

1 2 3 5 6 7 8 9 10

continue

当遇到 continue 时,出现在它之后的循环体中的所有语句都被忽略,循环准备下一次迭代。

int testVal = 0;
while (testVal < 10)
{testVal++;if (testVal) == 4continue; //终止循环的该次迭代cout << testVal << " ";
}

结果是

1 2 3 5 6 7 8 9 10

这篇关于编导期末卷的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

[期末]MVC模式写一个Java五子棋(含完整源码及简单AI)

GobangGame 一个下五子棋的java小程序 本程序参考翁恺老师细胞模拟机的控制模式编写 概述及目标 五子棋是一种两人对弈的纯策略型棋类游戏,通常双方分别使用两色的棋子,下在棋盘上,先形成5子连线者获胜。 本程序有命令行界面与图形化界面,用户通过相应方式输入下子位置后与Robot进行对战。 MVC 模式 本小程序尝试使用MVC 模式编写。 MVC 模式代表 M

数据结构代码集训day14(适合考研、自学、期末和专升本)

题目均来自b站up:白话拆解数据结构! 今日题目如下:(1)试写一个算法判断给定字符序列是否是回文。 (2)给定一个算法判断输入的表达式中括号是否匹配。假设只有花、中、尖三种括号。 题1         回文序列即正着读反着读,都是一样的。比如abba就是回文序列,abab就不是。         由于要反着读,能够很容易想到一种线性结构——栈。栈后进先出,很容易实现输入序列的反

【CSP:202012-2】期末预测之最佳阈值(Java)

题目链接 202012-2 期末预测之最佳阈值 题目描述 求解思路 前缀和 根据题意我们可以得知: θ θ θ 值为 a[i].y 时的预测正确的次数等于 a[i].y 前面有多少个 result = 0 以及后面有多少个result = 1。定义Score类用来存储y和result,其中sum0表示a[1]到a[i]有多少个result = 0,sum1表示a[1]到a[i]

《计算机网络期末复习知识点大全》

目录 一、第一章 概述 1. TCP/IP分层网络体系结构、分层原因、作用 2. 时延、发送时延、传播时延 2.1 速率相关性能指标 2.1.1 速率 2.1.2 带宽 2.2 时间相关性能指标 2.2.1 发送时延 2.2.2 传播时延 2.3 考点例题 二、第二章 物理层 1. 编码与调制 2. 常用编码方式 2.1 不归零制 2.2 曼彻斯特编码 2.3 差分

tyut-数据库期末复习要点

第一章 数据库系统(DBS)是由数据库(DB),数据库(DBMS) ,应用程序和数据库管理员 (DBA)组成的存储,管理,处理和维护数据的系统 数据模型:比较真实的模拟现实世界,容易为人所理便于在,计算机上实现 数据模型是数据库系统的核心和基础 数据库是指长期储存在计算机中,有组织,有可共享的数据集合 DBMS,他是位于用户和操作系统之间的一层数据管理软件 实体之间的联系可抽象为

【Hadoop】知识点总结、大学期末复习

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: @Yaoyao2024往期回顾: 【论文精读】上交大、上海人工智能实验室等提出基于配准的少样本异常检测框架超详细解读(翻译+精读)每日一言🌼: 人只有知道自己无知后,才能从骨子里谦和起来,不再恃才傲物,不再咄咄逼人。 – 莫言 0、前言: Map:每次对一行数据进行操作Reduce:对具有同一个key的所有k-v进

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

2023-2024 学年第二学期小学数学六年级期末质量检测模拟(制作:王胤皓)(90分钟)

word效果预览: 一、我会填 1. 1.\hspace{0.5em} 1. 一个多位数,亿位上是次小的素数,千位上是最小的质数的立方,十万位是 10 10 10 和 15 15 15 的最大公约数,万位是最小的合数,十位上的数既不是质数也不是合数,这个数是 ( \hspace{4em} ),约等于 ( \hspace{1em} ) 万 2. 2.\hspace{0.5em} 2.

查询课程编号以'c05'开头,被3名及以上学生选修且期末成绩的平均分高于75分的课程号、选修人数和期末成绩平均分,并按平均分降序排序

--查询课程编号以'c05'开头,被3名及以上学生选修--且期末成绩的平均分高于75分的课程号、选修人数--和期末成绩平均分,并按平均分降序排序use teachinggoselect courseno,count(studentno)as '选修人数',avg(final) as '期末平均分'from scorewhere courseno like 'c05%' and fi

JAVA期末复习2

目录 一、Java基础知识 1. 下面几个标识符中,哪些是命名正确的 (A) 2. 分析以下代码,哪些是合法的 (C) 3. 以下代码的执行结果是( B ) 4. 下面哪个不是java中的关键字?( B ) 5. 下面对数组 int[] a={1,7,8,9}; 的描述不正确的是( D ) 6. 下列语句编译没有错误的是( C ) 7. 数组a的第三个元素表示为(D) 8. Ja