技术标签: # C++
结构体(structure)、共用体(union)类型、枚举(enumeration)类型、类(class)类型等。
结构体:在一个组合项中包含若干个类型不同(也可相同)的数据项。
struct 结构体类型名
{ 成员表(域表)};
方法一:先声明结构体类型再定义变量;
方法二:声明类型同时定义变量;
如:
struct Student //声明一个结构体类型 Student
{
int num; //每个成员(或称一个域)
char name[20]; //类型名 成员名
char sex;
int age;
float score;
char addr[30];
}; //定义变量,方法二:将 【;】改为 【student 1,student2;】
Student student1 ,student2; //定义变量,方法一
方法一:可将结构体变量赋值给另一相同结构体变量。如:student1=student2;
方法二:可引用结构体变量中一个成员的值。如:student1.num =10010;
可得一般形式为:结构体变量名.成员名
结构体数组:每个数组元素都是一个结构体类型的数据,都分别包括各个成员项目。
如: Person leader[3]={"LI",0,"Zhang",0; //定义Person类型的数组。内容为名字和得票数。
一个结构体变量的指针:该变量所占据的内存段的起始地址。
设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。
指向结构体变量的运算符:“—>”称为指向运算符。
三种等价形式:
1.结构体变量.成员名。 如:stu.num。
2.(*p).成员名。 如:(*p).num。
3. p—>成员名。 如:p—>num。
#include<iostream>
struct student
{
int num;
float score;
struct student *next;
};
int main()
{
student a,b,c,*head,*p;
a.num = 31001;a.score =89.5;
b.num = 31003;b.score =90;
c.num = 31007;c.score =85;
head =&a; /将结点a的起始地址赋予头指针head
a.next =&b; /将结点b的起始地址赋予a结点的next成员
b.next =&c; /将结点c的起始地址赋予b结点的next成员
c.next =NULL; /结点的next成员不存放其他结点地址
p =head; /使p指针指向a结点
do
{
cout<<p->num<<" "<<p->score<<endl; /输出p指向的结点的数据
p=p->next; /使p指向下一个结点
}while(p!=NULL); /输出完c结点后p的值为NULL
return 0;
}
以上这种链表称为:静态链表,即:所有结点(结构体变量)都是在程序中定义的,不是临时开辟的,也不能用完后释放。
动态链表:各结点是可以随时插入和删除的,这些结点并没有变量名,只能先找上一个结点,才能根据它提供的下一个结点的地址找到下一个结点。只有提供第一个结点的地址,即头指针head,才能访问整个链表。
方法一:用结构体变量名作参数。(一般很少用这种方法)
方法二:用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
方法三:用结构体变量的引用作函数形参,它就成为实参(是结构变量)的别名。
课本P200有三个实例。
C语言(C++保留):利用库函数 malloc和free来分配和撤销内存空间。
C++:用new和delete运算符来取代。
注:
1.new运算符:动态分配内存。 delete运算符:释放已经分配的内存空间。
2.new与delete可适用于任何情况,但malloc与free却很多时候不适用。
原因:在类当中,malloc不会调用类的构造函数,而new会调用类的构造函数,同样道理,free不会调用类的析构函数,而delete会调用类的析构函数。
指针变量 = new 类型 (常量)
指针变量 = new 类型 [表达式]
注:
1.常量是初始值可以缺省。
2.用new分配数组空间时不能指定初值。
3.作用:从堆分配一块类型大小的存储空间,并返回初始值。
delete 指针变量(对变量)
delete[ ] 指针变量(对数组)
注:
指针变量必须是一个new返回的指针,其实malloc返回的指针也是可以的。
new int ; /开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)
new int(100); /开辟存放一个整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址
new char[10] ; /开辟一个存放字符数组(包含10个元素)的空间,返回字符数组首元素的地址
new int[5][4]; /开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址
float *p = new float(3.14159)
/开辟一个存放单精度数的空间,并指定该数的初值为3.14159,将返回的该空间的地址赋给指针变量P
枚举(enumeration)类型:若一个变量只能有几种可能的值,则可定义枚举类型。
所谓“枚举”是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
声明枚举类型的一般形式:
enum 枚举类型名 [枚举常量表];
说明:
1.枚举元素按常量处理,故称枚举常量。(不能赋值,值是固定的)
2.枚举元素作为常量是有值的,其值为整数,按定义时的顺序赋值0,1,2,3,…(也可以申明时指定元素的值)。
3.枚举值可做判断比较,按整数比较规则。
4.不可对枚举变量直接赋整数,只接受枚举类型数据。
用typedef声明一个新的类型名来代替已有的类型名:
typedef int INTEGER; //指定用标识符INTEGER代表int
//故而以下两行等价
int i,j;
INTEGER i,j;
归纳:
声明一个新类型名的方法【数组】:
1.先按定义变量的方法写出定义语句(如 int i;)【int n[100];】。
2.将变量名换成新类型名(如 将i换COUNT,即 int COUNT)【int NUM[100];】。
3.在最前面加typedef(如 typedef int COUNT)【typedef int NUM[100];】。
4.然后可用新类型名(如 COUNT)去定义变量【NUM n;(n是包含100个整型元素的数组)】。
注:
1.typedef只对已存在的类型增加一个类型名,没有创造新的类型。
2.可用typedef声明新类型名,但不能用来定义变量。
3.用typedef声明数组类型、字符串类型,比较方便。
4.用于不同系统之间移植更改效率高,正常将定义类型单独放在一个头文件,使用方便。
1.如果命题p为真、命题q为假,则下述哪个复合命题为真命题(B) A.p且q B.如果q则p C.非p D.如果p则q 2.p和q均是原子命题,“如果p那么q”是由p和q组合得到的复合命题。下面对“如果p那么q”这一复合命题描述不正确的是( A) A.无法用真值表来判断“如果p那么q”的真假 B....
css选择器标签选择器:针对一类标签(如:body,div,p,ul,li)ID选择器:针对某一个特定的标签使用(如:id=“demo”)类选择器:针对你想要的所有标签使用(如:class=“demo”)通用选择器(通配符):针对所有的标签都适用(如:*号)后代选择器(继承选择器):用空格隔开(如:div p,注意两选择器用空格键分开)交集选择器(组合选择器):(如:.head .head_logo,注意两选择器用空格键分开)。并集选择器:(群组选择器):用逗号隔开伪类选择器:(如:就是链
这两天在做项目的 时候遇到了这个问题,发现网上也有人提出了这个问题,但是根本没有人去解决,可能是问题太简单了。我在这里贴上我的代码,以往对大家有帮助。首先,实现的效果,希望是这样的。网上也给出了一些解决方案,但是根本没有实现动态的下拉呀。(下面贴出网上解决方案的截图)接下来再来描述一下问题。我要实现的是listview的headerview 一开
本文出处:https://www.cnblogs.com/goodhacker/p/3355660.html#undefined python的标准库里的日志系统从Python2.3开始支持。只要import logging这个模块即可使用。如果你想开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件,只要这样使用: 1 import logging 2 ...
<template> <div class="time"> <span>{{nowTime}}&nbsp</span> <span>{{nowWeek}}</span> </div></template><script>export default { data () { return { nowTime: '',
本文主要向大家介绍了Linux运维知识之win10下Linux子系统开启ssh服务,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。虽然win10自带的bash功能已经很丰富,操作也简便,不过习惯了用xshell, 还是选择用xshell来操作直接用xshell连接127.0.0.1 端口22 提示连接失败。说明应该是ubuntu的sshd服务设置有问题:解决方案如下:安装ss...
人工智能、机器学习泛滥。以前搜不出来,现在搜出来的太多。找自己想看的都得费半天劲。这当然是好的,有资料总比没有强。但是搞这个方向,适合自己的才是好材料。太简单,你觉得不过瘾,太深奥,你看不懂,所以文章,刚好讲到你的困惑点,对你来说才是好文章。我自己觉得,反向传播方法,UFLDL里的讲解比较适合我,通篇没有废话,简单直接,写的非常好,所以Mark一下,免得下次忘了UFLDL这个关键词,又费半...
游标中的更新和删除 在PL/SQL中依然可以使用UPDATE和DELETE语句更新或删除数据行。显式游标只有在需要获得多行数据的情况下使用。PL/SQL提供了仅仅使用游标就可以执行删除或更新记录的方法。 UPDATE或DELETE语句中的WHERE CURRENT OF子串专门处理要执行UPDATE或DELETE操作的表中取出的最近的数据。要使用这个方法,在声明游标时必须使用FOR
最简单的方法是用pgrep 获取进程号,然后kill掉
packagecom.get.one;importjavax.mail.BodyPart;importjavax.mail.Message;importjavax.mail.Multipart;importjavax.mail.Session;importjavax.mail.Transport;import javax.mail.internet.*;import java.util.*;imp...
客户端代码,有问题欢迎指出,新手package com.qc.exp.common.util;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;impo...
在 MySQL 中,存储过程或函数中的查询有时会返回多条记录,而使用简单的 SELECT 语句,没有办法得到第一行、下一行或前十行的数据,这时可以使用游标来逐条读取查询结果集中的记录。游标在部分资料中也被称为光标。关系数据库管理系统实质是面向集合的,在 MySQL 中并没有一种描述表中单一记录的表达形式,除非使用 WHERE 子句来限制只有一条记录被选中。所以有时我们必须借助于游标来进行单条记录的数据处理。一般通过游标定位到结果集的某一行进行数据修改。结果集是符合 SQL 语句的所有记录的集合。