曲径通幽论坛

标题: GNU C 中的 void 类型指针 [打印本页]

作者: beyes    时间: 2011-8-1 14:47
标题: GNU C 中的 void 类型指针
按照 ANSI 标准,不能对 void 类型指针进行算法操作,如不能:
void *p;
p++;
p += 1;

但在 GNU C 中却可以,编译时不会报错,在运行中很可能会出现逻辑错误,因为在 GNU C 中 void 型指针是按照 char * 类型来运算的。比较下面代码:
[C++] 纯文本查看 复制代码
#include <stdio.h>

int main()
{
    int i = 4276803;
    void *p = &i;
    printf ("%d\n", *((int *)p));
   
    p++;
    printf ("%c\n", *((char *)p));

    return 0;
}

运行输出:
[beyes@beyes strp]$ ./voidp
4276803
B
程序中,4276803 这个整数的十六进制为 0x414243,41,42,43 对应的 ASCII 码分别为 A, B, C 。所以程序中对 void 型指针 voidp 进行 ++ 操作时,它指向了 B 这个字符。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2