整容说文库 > 程序代码 > 教育资讯

(char *)0 怎么解释?

来源:学生作业帮助网 编辑:整容说文库 时间:2019/09/15 22:11:23 程序代码
(char *)0 怎么解释?程序代码
(char *)0 怎么解释?
一个char型的指针,值为0
NULL 指针?
(char*)0 是 char 型地址 0x0,这个地址值可以赋给一个 char 型指针,从而形成一个 
 char 型空指针
一个指向char的指针,初始化为空。
等于:char *ch = NULL;
一个char型的指针,值是0
避免楼主误会,特说明一下 ,楼上几位讲的是一样的,任何类型的空指针的值均为0.
(char *) 0表示一个指向char型对象的空指针
强制类型转换,一个指向char的空指针
引用 3 楼 wanjingwei 的回复:
(char*)0 是 char 型地址 0x0,这个地址值可以赋给一个 char 型指针,从而形成一个
  char 型空指针

请参照3楼说法。

其他楼的答案都提到了是什么什么的指针,哪来的指针啊???误人子弟!!!
哈哈,都错了吧,
(char *)0 是一个值,不是指针。指针是变量。
引用 9 楼 chgaowei 的回复:
哈哈,都错了吧,
 (char *)0 是一个值,不是指针。指针是变量。


(char *)0是一个值,但它是个指针,它是char 型空指针的字面值。
引用 9 楼 chgaowei 的回复:
哈哈,都错了吧,
 (char *)0 是一个值,不是指针。指针是变量。


如果我说“8是一个int型”,你能说“因为8是一个常量,所以它不是int型“吗?
8是int型的字面值,(char *)0的例子是一个道理。
相当于把NULL转化成了char*类型。
引用 3 楼 wanjingwei 的回复:
(char*)0 是 char 型地址 0x0,这个地址值可以赋给一个 char 型指针,从而形成一个
char 型空指针


SP
本质上说……

(int)6.5
这样的没啥区别……
地址0
同意三楼wangjinwei的回复, 存储该指针的地址值为0x0
可以称作char型空指针
指针不一定是变量
指针 = 地址+数据类型
基本上就是char*类型的空指针。。。
引用 3 楼 wanjingwei 的回复:
(char*)0 是 char 型地址 0x0,这个地址值可以赋给一个 char 型指针,从而形成一个
  char 型空指针


这种说法是对的,没有指针一说,就是地址。指针是变量。
引用 17 楼 caicai_vxworks 的回复:
可以称作char型空指针
 指针不一定是变量
 指针 = 地址+数据类型


数据类型应该是编译器的符号表来维护吧?
引用 18 楼 steedhorse 的回复:
基本上就是char*类型的空指针。。。

这个不是指针,它是地址,指针是用来保存地址的。
把0强制转换成指针 如果不是不加char *的话就是整数0了

在某些函数调用时需要用(char *) 0 而不能直接用 0

因为sizeof(0) 不一定等于 sizeof(char * (0))
引用 16 楼 niloulili 的回复:
同意三楼wangjinwei的回复, 存储该指针的地址值为0x0

应该说是存储该地址的指针变量的值为0x0,哈哈希望没把你绕晕。
引用 22 楼 kingstarer 的回复:
把0强制转换成指针 如果不是不加char *的话就是整数0了

 在某些函数调用时需要用(char *) 0 而不能直接用 0

 因为sizeof(0) 不一定等于 sizeof(char * (0))

你应该仔细看下指针的定义。
引用 20 楼 lanseshenhua 的回复:
引用 17 楼 caicai_vxworks 的回复:
可以称作char型空指针
指针不一定是变量
指针 = 地址+数据类型


数据类型应该是编译器的符号表来维护吧?
我说的是对的哦  经过无数次的验证的  你仔细想想就觉得对了 
应该是(unsigned char *)0 吧 表示地址
因为地址没有负值吧 所以......
char *ch = NULL;
一个char*类型的指针右值,其值为0.
引用 25 楼 caicai_vxworks 的回复:
引用 20 楼 lanseshenhua 的回复:
 引用 17 楼 caicai_vxworks 的回复:
 可以称作char型空指针
 指针不一定是变量
 指针 = 地址+数据类型


 数据类型应该是编译器的符号表来维护吧?
我说的是对的哦  经过无数次的验证的  你仔细想想就觉得对了

你应该看看编译原理方面的书,如果我没记错,数据类型应该是符号表来维护的。
char 型指针,其值为0,相当于把一个char 放在了以0地址开始的地方。

这种用法常用在求结构体内的变量偏移量

struct test{
    int i;
    char c;
    float f;
}


我想求f在结构体中的偏移量怎么办?

&((struct test *)0->f)

这就是f 在结构体test中的偏移量。看到了(struct test *)0 ,  相当于把一个struct test放在0地址处,求f的地址,即偏移量。

顶31楼
引用 30 楼 lanseshenhua 的回复:
引用 25 楼 caicai_vxworks 的回复:
引用 20 楼 lanseshenhua 的回复:
引用 17 楼 caicai_vxworks 的回复:
可以称作char型空指针
指针不一定是变量
指针 = 地址+数据类型


数据类型应该是编译器的符号表来维护吧?
我说的是对的哦  经过无数次的验证的  你仔细想想就觉得对了

你应该看看编译原理方面的书,如果我没记错,数据类型应该是符号表来维护的。

我说的与你说的没有矛盾吧
重申:指针 = 地址+数据类型
引用 31 楼 phpjspasp 的回复:
char 型指针,其值为0,相当于把一个char 放在了以0地址开始的地方。

这种用法常用在求结构体内的变量偏移量
C/C++ codestruct test{int i;char c;float f;
}

我想求f在结构体中的偏移量怎么办?

&((struct test *)0->f)

这就是f 在结构体test中的偏移量。看到了(struct test *)0 ,  相当于把一个struct test放在0地址处,求f的地址,即偏移量。


这就要看你的编译器 是咋排放的  
程序代码