请教一个typedef的问题,实在搞不懂

来源:百度知道 编辑:UC知道 时间:2024/05/17 04:04:53
typedef unsigned char C_Block[8];

int set_key(C_Block *key)
{
......
}

调用时这样
unsigned char buf[24];
set_key((C_Block *)buf);

请问这个(C_Block *)表示的是什么意思?

C_Block是一个unsigned char[8]类型的数组,因此C_Block*就是指向unsigned char[8]类型数组的指针类型.因此,在set_key函数看来,buf已经变成了一个长度为3的C_Block类型的数组.

你可以用如下代码来验证

#include "stdio.h"

typedef unsigned char C_Block[8];

int set_key(C_Block *key)
{
printf("%c",(*(key+1))[0]);
return 0;
}

void main()
{
unsigned char buf[24]="ABCDEFGHIJKLMNOPQRSTUVW";
set_key((C_Block *)buf);
}

这段代码的输出是I.说明key+1就把指针指向了第8个元素

这个是强制类型转换,就是取buf的前8位

答:C_Block*表示的是指向unsigned char数组的指针。
你可以这么用它:
unsigned char k[8] = "abcdefg";
C_Block * q = k;
* q[3] = 'q';
cout << k;
输出:abcqefg

(C_Block *) = (unsigned char *)
也就是
set_key ((C_Block *) buf) = set_key ((unsigned char *) buf)
也就是把 buf强制转换为无符号的char指针

另外 typedef 并非 #define
typedef可以定义比较高级的类型 而define仅仅是宏
一个最经典的就是linux里面的 signal 这个函数 如果你能看懂这个函数的
声明 那typed