3DProgramming第一次课数据类型20210830

文章目录
前言
一、程序的开发过程?
二、基本数据类型
1.char、int、float、double
2.基本数据类型——指针
三、自定义数据类型(enum typedef、struct、union、class)
1、枚举类型——enum
2、typedef
3、struct
4、union共用体
前言
课程目的:进一步掌握C++语言程序开发,在此基础上掌握面向对象思想和OpenGL的三维交互程序的开发。学会基于OpenGL SDK项目开发,学会通过打断点调试方式解决实际开发过程中遇到的问题。

课程时间安排:
主要内容:

自定义数据类型
函数
类和对象
类的封装、继承、多态
摄像机类
模型导入类(静态模型、动态模型)
纹理贴图类
程序框架类
粒子特效类
开发三维漫游程序(如三维小游戏或者三维互动程序)
一、程序的开发过程?
源程序通过借助翻译程序加工成为目标程序(结果程序)。

三种不同类型的翻译程序

(a)汇编程序:用来翻译用汇编语言写的源程序
(b)编译程序:用来翻译用高级程序设计语言写的源程序。
(c)解释程序:同样是翻译用高级程序设计语言写的源程序,它与编译程序的不同点在于:它是边翻译边执行的。

程序的开发过程:编辑、编译、连接、运行调试。

二、基本数据类型
1.char、int、float、double
sizeof(char)=1
sizeof(int)=4
sizeof(float)=4
sizeof(double)=8

常见的指针类型都是占用四个字节的。

2.基本数据类型——指针
什么是内存地址?
内存地址是一个唯一的代表某个存有数据的内存单元的数值编码。

什么是指针变量?
指针变量是一个存储计算机内存地址的变量。

什么叫做指针的取值?
从指针指向的内存读取数据称作指针的取值。

指针类型(int* float*)
指针也可以是void类型、NULL指针和未初始化的指针。
void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。
NULL 指针是一个定义在标准库中的值为零的常量。

代码如下(示例):

int *ip;
float *fp;
char *cp;
char *pstr = “Hello world”;
cout << sizeof(ip) << endl;//4 指针都是占用四个字节的内存空间
cout << sizeof(fp) << endl;//4
cout << sizeof(cp) << endl;//4
cout << sizeof(pstr) << endl;//4
cout << strlen(pstr) << endl;//11 如果没有中间的空格就是10,计算字符串的实际长度

三、自定义数据类型(enum typedef、struct、union、class)
1、枚举类型——enum
声明形式: enum 枚举类型名 {变量值列表};
对枚举变量按照常量处理,不能对他们赋值。例如:Sun=0;但是可以在声明的时候另行指定枚举元素的值,之后就不可以了,如:enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat};
枚举值可以进行关系运算。
整数值不能直接赋给枚举变量,得强制类型转换。
但是枚举元素可以直接赋给整型变量。
#include “stdafx.h”
#include <windows.h>
#include <iostream>
using namespace std;

enum enum_Weekday { Sunday = 7, Monday = 1, Tuesday, Wednsday, Thursday, Friday, Saturday };//定义一个星期的枚举类型

int main()
{
int a;
enum enum_Weekday day; //定义一个星期枚举类型的变量
day = (enum_Weekday)5;//强制类型转换 整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。
//day = Saturday;

a = Monday; //整数值不能直接赋给枚举变量(要强制类型转换),但是枚举元素可以赋给整型变量
cout << day<<endl;
cout << a << endl;

return 0;
}

2、typedef
四大用法

给已定义的变量类型起个别名
定义函数指针类型
定义数组指针类型
定义数组类型
详细请见 https://blog.csdn.net/qq_31073871/article/details/81258558

3、struct
struct Stu
{
int xuehao;
char* pName;
char score[10];
};
struct Stu stu1;

struct Stu
{
int xuehao;
char* pName;
char score[10];
}stu1;

typedef struct stu
{
int xuehao;
char *pName;
char score[10];
} Stu_Struct,*pStu_Struct;
Stu_Struct stu1,stu2;
pStu_Struct pstu1;

struct 的对齐方式
https://blog.csdn.net/d04421024/article/details/5644945

各变量存放的起始地址相对于起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。(为了提高CPU的存储速度)
一般来说,struct所占用的字节数不会粗暴地等于各成员变量所占用的字节数之和。

结构体占用的内存大于等于所有成员占用的内存总和(成员之间可能存在缝隙)
举例:

struct MyStruct
{
double dda1;
char dda;
int type;
};
sizeof(MyStruct)=16 //而不是等于粗暴地相加8+1+4=13

4、union共用体
union 共用体名
{
数据类型 成员名;
数据类型 成员名;

}变量名;

结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存总和(成员之间可能存在缝隙)。共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新成员赋值,就会把原来的值覆盖掉。

 

本文为原创文章,转载请注明出处!