这种变量类型名跟类型名一样是什么意思

补充相关内容使词条更完整,還能快速升级赶紧来

Windows数据类型都是从标准C的数据类型经过类型重定义而来。INT数据类型是有符号

DWORD数据类型是无符号整型。

Windows API使用了很多Windows自巳定义的数据类型要熟练使用Windows API必须要熟悉Windows数据类型。这些数据类型是Windows特有的在SDK的相关头文件中有定义。

Windows数据类型都是从标准C的数据类型经过类型重定义而来INT数据类型是有符号

,DWORD数据类型是无符号整型

为什么说是常见数据类型而不是全部呢?因为第一Windows数据类型太多叻,比如说Windows中有很多对象每一个对象就对应一个句柄,另外还有

等等第二,这是没必要的掌握数据类型命名的一些规律看到一个新嘚数据类型就能猜出它所表示的意思,列了太多大家看了反而全都记不住如果大家一定想知道可以查看SDK文档。第三很多数据类型我也沒见过或者忘记了。

WORD:16位无符号整型数据

HANDLE:对象的句柄最基本的句柄类型

HICON:图标的句柄

HKEY:注册表键的句柄

FLOAT:浮点数据类型

SIZE_T:表示内存大尛,以

为单位其最大值是CPU最大寻址范围

VOID:无类型,相当于标准C语言中的void

方式常见于SDK头文件中对API函数的声明中,相当于_stdcall(更严格地说這不是数据类型,而是一种

类型的命令方式一般是在其指向的数据类型前加“LP”或“P”比如指向DWORD的指针类型为“LPDWORD”和“PDWORD”。LP为长指针P為短指针,在32位系统中已经不再区分都是一样的长度。

各种句柄类型的命名方式一般都是在对象名前加“H”比如位图(BITMAP)对应的句柄類型为“HBITMAP”。

无符号类型一般是以“U”开头比如“INT”是符号类型,“UINT”是无符号类型

根据这些命名规律以及自己的经验看到一些没见过嘚数据类型也就能知道它的代表的意思

查看Windows数据类型的定义可以看到所有的windows数据类型都是由C数据类型经过类型重定义得到的。如DWORD实质上僦是 unsigned long 数据类型32位无符号整型。而经常要用到的HANDLE类型实质上是无类型

所有的Windows数据类型都是通过这种方式在SDK的头文件中进行定义的它们都昰来源于标准C的数据类型

Windows API 函数的参数、返回值或一些重要的

使用的数据类型都是Windows数据类型。

比如以经常要要到的MessageBox函数如下:

MessageBox函数的返回徝是int型,是标准C数据类型但是所有的参数都使用了Windows数据类型。比如HWND用于表明窗口的句柄

}

好的 各位 那么现在我们开始这節课的学习 ,那么这节课我们要讲的是我们第14章 那么关于结构体 共用体 用户定义类型 ,那么这个用户定义类型 就刚刚我们是看到这个typedef ,那么这里面 这一章里面 在我们这个操作题目里面 是必考一个的 ,我们知道三个操作题 那么填空改错和程序设计 必考一个程序题 ,那麼这个里面我们重点是我们的结构体 那么结构体里面有一个非常难的点就是我们的 ,链表 那么别的老师可能在这个地方 ,基本不会跟夶家讲 那么咱们这地方那么必须好好学一学 ,因为它如果考一个编程题 那么如果这个不会的话 ,我们24分就没有了 好 ,那么现在我们來看一看大概的一个情况 第一个是我们结构体类型的定义 ,那么这里看清楚 叫什么 叫类型的定义 ,第二个叫做我们结构体变量类型的萣义 那么它们两个之间什么不同 ,一会我们再说 然后完了以后结构体数组 ,然后结构体指针 结构体指针完了以后 ,我们学一个链表 然后供应体的话 ,我们基本上稍微看一看就可以 跟我们结构体 非常的接近 ,那么这是我们大概的一个情况 那么接下来 我们将来一个個来进行学习 ,我们先来学习第一个问题 叫做我们结构体类型的定义 ,那么现在我们通过我们编译器 给大家来写一点内容 ,我们一起來看一看 关于我们这一个结构体 类型的定义这个问题 ,在讲这个问题之前 我们来打一个简单的比喻 ,在我们现实生活中 我们知道 那麼例如打一个 我们这一个篮球队 ,那么篮球队完了以后 我给大家讲一个这个中国队 ,那么咱们想一想 篮球队和中国队 ,那么篮球队应該是我们一个类型 跟它所对应的应该是 像我们的羽毛球 ,我们的足球等等 那么羽毛球和足球 它不是一个具体的对象

它是一个类型 ,篮浗队它不是具体哪一个队 而我们这个中国队 ,应该是我们篮球队里面的一个具体化实例 具体的一个队形 ,那么在我们这一个结构体里媔 我们先应该去来定义一个结构体类型 ,那么就相当于定义一个篮球队 那么篮球队我们怎样来规划它 ,就相当于我们有一个教练 然後我们需要一个这个队乙 ,然后我们需要这一个十个球员 那么这个相当于是 我来规划一个篮球队 ,应该这样来规划 规划好了以后 ,现茬我们具体去请一些人来 那么具体 张三 李四 王五 分别承担什么样的角色 ,那么咱们想一想 你规划这个球队的时候要发工资 ,是不是不偠发工资 但是你把这个人员请过来了以后 ,队乙 是张三 这个教练是李四 ,那么这个时候我们是发工资的 那咱们想一想 ,我们这个具體队乙的话 这个就相当于是我们的结构体变量类型了 ,它需要存储空间了 而这个是我们类型的说明 ,它是不需要存储空间的 完了以後我们再来看 ,将来我们中国队的这个张三 那么咱们想一想 ,那么张三它应该是属于我们中国队里面的 具体的某一个成员 ,张三是中國队的某一个成员 那么最终我们所要使用的 应该是它里面的成员 ,那么这是我们这个结构体类型 到我们这个变量类型 ,结构体类型到變量类型 到我们成员 这三者的关系 ,现在我们来编一点程序 首先我们来看 我们结构体定义的关键字 ,

那么struct这么一个单词 我们需要记下來 那么我们定义结构体变量类型的时候 ,其它的那么全部是相同的 听好 ,我们结构体变量类型 结构体类型等等 ,它其它的内容都是楿同的 也就是说我们不会产生一个真正的类型 ,而是把其它类型进行一个综合 我们看一看 ,然后结构体名称 例如我们来一个中国队 ,国家队 a队 ,简单一点 完了以后 我们来一个大括号 ,大括号里面我们来一个int a 然后分号 char 我们的这个b[3] ,那么像当前这一个地方 我们就楿当于是定义的一个类型为a ,a的话有这么两个成员所组成 那么这里我们进行的事情是 ,那么这里我们刚刚打的比喻里面 就相当于是 有叻一个篮球队 ,这里记清楚了 这个后面要加一个分号 ,有这么一个篮球队了 记清楚 ,那么篮球队里面这个规则 那么自己来定义就可以叻 这是第一步 ,第二步我们接下来做的事情是 具体这个中国队 那么定义的方式方法我们有三种 ,这里定义的方法有三种 那么分别是這么三种 ,第一种我们在这个后面 直接写上我们这个b 不写个b b重复了 x ,那么这个x它是什么东西 它不是一个类型了 ,它是一个变量类型 僦相当于我们这里的中国队 ,这是我们一种最简单的这个定义方式方法 在定义类型的同时 把变量类型也进行了定义 ,那么完了以后 今忝我们刚才讲的 我们这个成员 ,例如我们可以写成x.a 那么等于45 那么现在我们看一看 ,这个x.a=45 什么意思

x那么是我们这个a类型的结构体变量类型 ,然后通过这个小点 我们称它为成员运算 ,那么这个成员运算里面引用它的成员为a成员 然后给它赋值为45 ,这就完成了第一个问题 關于我们第一种变量类型定义的方法 ,第二种定义的方法 我们再来看一看 ,我把这个x把它删掉 然后在后面的地方来一个struct a ,然后空格 再來一个x 那么这是一种定义我们结构体变量类型的方法 ,那么相当于是前面我把它的类型定义好了 这个地方我把它这个变量类型定义好叻 ,这个地方我们是引用它的成员 那么这里要特别注意的就是 ,很多同学可能会把这个a省略掉 这里你要明白问题是 我们x的类型是 ,struct a类型 把这两个单词要写在一起 ,才能够表示它的类型 x类型是struct a类型的 ,那么这是我们第二种 第二种是 类型和定义分开来做 ,第三种跟我們第一种比较接近 把我们上面这个类型给它省略掉 ,那么这一个也是可以的 我们结构体类型定义的过程中 ,我把它类型的名称给它省畧掉了 然后直接定义成我们的变量类型 ,那么很明显 这一种定义的方式方法它有一个弊端 那么就是说我们这个类型 不能够再去定义变量类型了 ,也就是说 除了在这个地方定义完了以后 你不能够在下面再去定义一个这种类型的这个变量类型 ,为什么 因为它的类型名我們省略了 ,这是我们三种这一个定义变量类型的方法 那么我们前面两种方式方法 是最常用的 ,我们第三种由于它有局限性 不能够再次使用它 ,所以的话不太用的多 那么这是我们这一个问题 大家好好看一看 来 ,

那么我们这个结构图里面 看结构体名称 然后类型标识名 成員名 ,那么这个我们刚刚讲的完全一样的 注意留意我们后面这里有个分号 ,然后我们这个地方类型定义完了以后 都得带分号 ,这三种凊况 然后程序的引用 ,刚刚我们简单说了一说 用了一个小圆点 ,接下来我们讲一讲 我们结构体变量类型的初始化 也就是说在我们给咜进行定义的过程中 ,直接给它赋值 那么例如这个地方我们看一看 ,我们写一个x= 然后大括号 大括号里面写一个45 逗号 ,我们写一个双引號ad 那么当前我们就相当于 ,定义了这么一个x结构体变量类型 然后按照我们的成员 给它进行了赋值 ,赋值完了以后 我们可以通过我们輸出函数 ,来输出我们这个成员a 那么这样写可不可以 ,肯定不可以的 我们一定要从x开始写 ,x 成员a 就相当于是中国队的前锋 中国队的Φ锋 这样写 ,然后我们再来运行 那么这个程序 它是能够输出我们结果的 ,这里少了一个分号 再来Ctrl+F5键再来一次 ,那么屏幕上面 所显示的昰一个45 那么这就是我们结构体的一个大概的一个情况 ,就给大家说到这个地方就说完了 好 ,那么现在我们对这个结构体 有了一个初步的认识好了以后 ,接下来我们具体来一个点一个点来学习 我们看一看我们具体内容 ,那么在我们教材上面的这个课程的分布 那么这裏我们看第一个问题 ,刚刚我们前面所遇到过的这个用户自定义类型 那么它的作用就相当于给它取一个别名 ,听好 我们在现实生活中见誰长得胖的话 我们称它为小胖 ,只要谁长得黑的话 我们称它为小黑 ,那么这样的一个称呼就是我们刚刚所讲的 这个别称 ,那现在我們看一看这地方 我们先看这一块 ,先看我括号里面这一块

我圈起来这一块 ,圈起来这一块里面 我们看是不是跟我们刚刚所讲的这个結构体 ,完全是一样的 看 struct ,然后是我们类型的名称 接下来是两个成员 ,对不对 那么它不同的地方在哪个地方 ,不同地方就在我们这個成员的前面加了一个 typedef ,那么它所表达含义就是我们这个地方 我们把它用T来表示它了 ,用这个T来表示成了它 那么什么意思 ,我们回箌刚刚那个程序里面来 当前这个地方 ,我们假设x 不在我们这个地方进行定义 那么如果我们要定义我们这个变量类型 ,我们该怎么定义 我们是不是应该struct 我们的b 然后定义我们x ,这样我们定义了一个x变量类型 那么当前这个程序 我们依然是可以能输出来的 ,我们看看结果 那么这里提醒我们的话 ,这一个右边非法了 我们的第12行 ,这是我们第12行 它说右边非法了x.b ,那么这个地方x.b的话 我们这个地方是b 这个地方也是个b 所以重复了 ,我们改一改 改个bb 那么现在我们再来运行一次 ,看有没有错误 它无法识别是哪一个b了 ,那么现在我们看屏幕上面 沒有什么错误 那是因为我没有给它赋值 ,没有语法错误了 但是我没给它赋值 ,我们再给它赋个值 那么是x.a等于我们45 ,然后x.b 我们等于 双引号ab 然后现在我们再给它运行一次 ,在运行之前 我发现这地方一个x加号的话 ,它这里不行 这里为什么不行 ,那是因为我们字符串 不能够直接这样赋值 那么干脆我们再和刚才一样的 ,我们直接等于号 我们大括号 我们来一个45 ,逗号 我们双引号ab 我们不去使用这个函数叻 ,

那么现在我们再来运行Ctrl+F5键 我们看一看它结果能不能输出来 ,那么答案等于45 ab 那么说明我们这个操作是成功的 ,这里同时也要注意一丅 这个%s x.b 这是什么东西 这是个地址 ,很多同学可能会想到写一个x.b[3] 那这里我们千万不要这样写 ,我反复强调过 在我们一个字符串 C语言Φ 字符串的话 ,是不存在这个变量类型的 所以我们下一步操作我们字符串的时候 ,全部使用我们地址 这一个x.b那么就是一个地址 ,因为b昰什么 数组名

}

  对于刚接触不久面向对象的嫃小白童鞋来说类的对象,对象的实例对象的引用,引用变量类型的问题以及莫过于没得对象~虽然博主也没得对象~本文将逐个逐个講解!

  在Java中有一句比较流行的话,叫做“万物皆对象”这是Java语言设计之初的理念之一。要理解什么是对象需要跟类一起结合起来理解。下面这段话引自《Java编程思想》中的一段原话:

  “按照通俗的说法每个对象都是某个类(class)的一个实例(instance),这里‘类’就是‘类型’嘚同义词。”

  从这一句话就可以理解到对象的本质简而言之,它就是类的实例比如所有的人统称为“人类”,这里的“人类”就昰一个类(物种的一种类型)而具体到每个人,比如张三这个人它就是对象,就是“人类”的实例

  2.何谓对象引用?

  我们先看一段話,这段话同样来自于《Java编程思想》:

  “每种编程语言都有自己的数据处理方式有些时候,程序员必须注意将要处理的数据是什么類型你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象所有这些在

  里都得到了简化,一切都被视為对象因此,我们可采用一种统一的语法尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“引用”(reference)”

  很显嘫,从这段话可以看出对象和对象引用不是一回事是两个完全不同的概念。举个例子我们通常会用下面这一行代码来创建一个对象:

  有小白童鞋会说,这里的per是一个对象是Person类的一个实例。也有小白童鞋会说这里的per并不是真正的对象,而是指向所创建的对象的引鼡到底哪种说法是对的?我们先不急着纠结哪种说法是对的,再看两行代码:

  这两行代码实现的功能和上面的一行代码是完全一样的大家都知道,在Java中new是用来在堆上创建对象用的如果per是一个对象的话,那么第二行为何还要通过new来创建对象呢?

  由此可见per并不是所創建的对象,是什么?上面的一段话说的很清楚“操纵的标识符实际是指向一个对象的引用”,也就是说per是一个引用是指向一个可以指姠Person类的对象的引用。真正创建对象的语句是右边的new Person("张三");因此这里的per是一个引用是指向一个可以指向Person类的对象的引用。

  简单来说对潒的引用意思是“定义一个变量类型,这个变量类型指向的是一个对象“

  3.何谓对象实例?

  首先没有“对象的实例”这一说法,只囿类的实例而类的实例,指的就是类的对象说白了就是对象。

  但是还是有很多人这样叫那怎么理解对象实例呢?比如说人类中有個叫宜春的程序员,宜春就是人类的一个实例

  s 就是 String类中的一个实例

  关于对象实例官方没有给其概念其实有很多概念官方都没有給的,什么父类声明指向子类对象、方法签名等概念都是没有的 只是人们经常这么用这么说就习惯了。因此关于实例对象大体可以理解為对象引用的意思...

  4.何谓引用变量类型?

  引用变量类型就是用引用类型声明的变量类型这种变量类型叫引用类型变量类型。如:

  5、对象与对象引用碰撞火花

  一个对象引用可以指向零个或一个对象

  一个对象可以被一个或多个对象引用

  怎么理解捏?~小白童鞋脑壳逐渐变大...~

  5、1. 从对象引用出发:一个对象引用可以指向零个或一个对象

  首先先来理解第一句话:从对象引用出发:一个对象引用鈳以指向零个或一个对象

  试想一下这样的代码会出现啥情况?是的它会编译失败

  看完上面这个例子就能说明了么?我们接着看下面這个代码:

  我们知道,凡是new都能创建出一个对象我们发现上面代码String对象引用str一个new了两次,而且上面代码编译也不报错的的确确是創建了两个对象,那这怎么说?小白童鞋说完感觉把博主按在马桶盖上...

  别急我们再看看上面代码输出啥

  这说明啥?说明现在str是下一個对象的引用。上一个对象被垃圾回收了因为上一个对象(也就是string1)不能被再次使用了。因此上面这个程序可以这样理解:

  对象引用str并鈈是指向第二个对象string2而是将之前指向第一个对象string1的引用重新指向了另一个对象string2,因此从对象引用出发:一个对象引用可以指向零个或一个對象!

  这个时候小白童鞋渐渐松开了把博主按在马桶盖上的双手...

  5、2. 从对象出发:一个对象可以被一个或多个对象引用

  我们再來理解一下第二句话:从对象出发,一个对象可以被一个或多个对象引用

  小白童鞋同样不解于是又用双手把博主按在马桶盖上...

  怎么理解?看的有点晕?会不会感觉后面两句代码就是对象引用=对象引用...

  其实要弄清除这个,首先你得弄清楚java虚拟机内存弄清楚变量类型(对象引用)和对象是如何存储的,对象引用是存储在栈内存中而对象是存储在堆内存中。分析如下:

  首先每个对象只有一个地址徝,new Demo()是创建了一个对象demo1是这个对象的地址值,用来找到这个对象demo2=demo1是把new Demo()这个对象的地址值由demo1改为了demo2,后面的demo3=demo2也是只改变了对象的地址值对象本身的空间大小都没有变化,变的是这个对象的地址值,也就是c里面所谓的指针

  这个时候,小白童鞋渐渐松开了把博主按茬马桶盖上的双手...

  最后我们再看看一个网上关于对象与对象引用很流行的程序与分析,代码如下:

  6、最后要相信的真理

  对於面向对象语言如java,首先请小白童鞋相信一句话:一切皆为对象。然后相信另一句话:变量类型只是一个零时的储存地点引用类型嘚变量类型只是一个普通变量类型,储存了引用类型的地址对象的创建是直接在内存中分配一个内存。

  引用类型变量类型 就 相当于 電脑上的快捷方式; 对象就相当于 你 磁盘里面 安装的游戏它 实实在在 占用你的空间内存; 而变量类型 只是快捷方式

  说白了基本数据类型變量类型就像是直接放在柜子里的东西,而引用数据类型变量类型就是这个柜子对应编码的钥匙钥匙号和柜子对应。

  到这里文章就結束了喔小白童鞋,你何识着咩啊~

  最后若有不足或者不正之处,欢迎指正批评感激不尽!

}

我要回帖

更多关于 变量类型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信