1、指针介绍:
普通类型指针,包含两个方面,一个是指向此类型变量的地址,另外一个是指向变量的长度。 如下:
*int p:
p指针指向int类型变量,p++相当于地址加4(32位处理器)。
*unsigned char p:
p指针指向unsigned char类型变量,p++相当于地址加1。
2、void指针有以下特性
1、void型指针比较特殊,一般称作泛指针,它没有任何类型,更没有了长度属性。
2、任何类型指针都可以赋值给void类型指针,并且不需要强制转换,也不会出现编译警告或者编译错误。 但是反过来则不行,必须进行强制转换才能赋值。 强制转换为了告诉编译器类型以及长度。
3、void型指针在ANSI规则下不能自加自减等,如下代码都是错误的。
//ANSI规则下以下运算都是错误的
void *p;
int data;
p++;
p--;
p = p + 1;
data = *p;
4、但是void指针在GNU规则下可以自加自减等,GNU认为void类型指针长度和char类型长度一样。 鉴于两种规则的不同,我们编写代码是要做好兼容性,防止代码移植出现不可预知问题。
//GNU规则下以下运算正确
void *p;
p++;
p--;
p = p + 1;
全部0条评论
快来发表一下你的评论吧 !