首页
社区
课程
招聘
c++小问题
发表于: 2009-11-23 20:00 4043

c++小问题

2009-11-23 20:00
4043
c语言中
byte    和
*(byte*)
区别是什么

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
byte 是个数据类型

下边的是 指向 byte类型的指针
2009-11-23 20:06
0
雪    币: 16
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
应该是指向"指向 byte类型的指针"的指针
2009-11-23 20:51
0
雪    币: 163
活跃值: (103)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
他们取的值有什么不同么
2009-11-23 20:53
0
雪    币: 348
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我想知道 这和C++ 有什么关系???
不要把C 和C++ 弄混 实际上他们是两种不同的语言,c++只是对C的兼容性更好些罢了。

byte 是数据类型  typedef unsigned char byte
*(byte*) 是指向指针的指针.

要问具体区别如上,宏观讲:一个是自定义的数据类型,另一个是指向指针的指针。
至于楼主说的取值  请用sizeof(byte)  sizeof(bype*)。
2009-11-23 21:33
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
byte 是数据类型  .
*(byte*) 是指byte的指针.
*(byte*)后面是不是应该还有点东西啊。
例如把某些指针转换成byte*类型的指针.也可以是函数的返回值需要强制转换成byte类型的指针。
2009-11-23 21:37
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
楼上第二句话的第一个*号忘去掉了.^-^

Byte是占一个字节的变量类型
Byte* (或者说PBYTE) 是指向Byte类型的指针
里面存的是个内存地址 32位下 指针都占四字节
*(Byte*)也就是*PBYTE  开头的那个*号 你可以理解成 为某个地址取值 或为某个指针变量取值  取出来的值就是这个变量类型   
一般  *(PBYTE)后面应该接着一个变量 不管是什么类型 首先被转为一个BYTE指针 然后从这个地址取值  

    个人觉得 BYTE和*(PBYTE)没什么区别 都是BYTE类型 都可以赋值和取值 只不过一个麻烦一个简单 一个C帮我们实现 一个是我们利用C提供的功能自己实现

说的好象有点复杂... 多用用就熟悉了 ^-^
2009-11-23 23:16
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
引用:*(byte*) 是指向函数的指针,此函数指定参数为byte型指针.
这个说法不对吧。应该是指向一段内存地址(被定义为字节型的数组)的按字节取的数据。

Byte很清楚了。
比如定义一个(byte*)PData   ;假设PData 初始化并被赋值为00401300,意思就是把该地址以后的数据全部看成一个 字节型 的数组。
*(byte*)PData  意思就是把这个地址 00401300 所在的数据按字节取出来(赋值给某变量)。

附:
     byte  i;    word  j; dword k;
       PChar   PData = 0x004013043;      内存地址Ox00401343以后数据为   12 34 56 78  90  ab  cd  ef
  
       i=*(byte*)PData;   // i=0x12      
       j=*(word*)PData;  //j=0x3412
       k=*(dword*)PData;  //k=0x78563412   ;如果此时 PData ++ . 则 k=0x90785634 ; 而我们通常会4个一取,所以应该 PData+=4才可以取到 后4个字节的值.
2009-11-24 00:17
0
雪    币: 348
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
看错了 *前面没类型 ……
楼上正解
2009-11-24 09:20
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
8楼说得很好,只是有小错误,应该是PChar   PData = 0x00401300
2009-11-24 10:03
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
10楼提醒的对。其实我开始就是PChar   PData = 0x00401300;写完感觉PData 取个4的倍数不太好,就故意取个0x00401343以杜绝误判,结果发现其他地方没改,抱歉。
2009-11-24 10:51
0
雪    币: 16
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
如果把第二个改写为 "byte **" 应该可以看懂了吧.....
2009-11-24 15:43
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
13
我觉得楼主 对指针理解的不深刻
谈一下我对指针的理解,分3个方面
1.指针是一个变量
2.指针指向一个地址
3.指针的类型决定了对它指向的地址空间的数据的解析方式

说下第3点

BYTE 型的指针 (即 定义为  BYTE *p = (BYTE *)0x000....) 取指针内容的时候取它指向的地址的前1字节大小的内容(因为 sizeof(BYTE) == 1)
WORD 型的指针(即 定义为 WORD *p = (WORD *)0x000...) 取指针内容的时候取她指向的地址的前2个字节的内容(因为 sizeof(WORD) == 2)
但是单纯从数值(指针变量的值)上看这2个变量是没有区别的
2009-11-24 16:30
0
雪    币: 288
活跃值: (112)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
14
楼主好像是问的取值吧。。。。
PVOID p = .......

byte b1 = (byte)p;
byte b2 = *(byte*)p;

是指这个的区别?
2009-11-24 16:51
0
游客
登录 | 注册 方可回帖
返回
//