为什么指向不同字符类型的指针不能混合,而不同字符类型的变量可以相互转换? 在C++中,为什么可以将未签名的char和有符号的char变量转换为彼此(实现当然是!?!),但是它们的指针不能相互转换?< /p>

为什么指向不同字符类型的指针不能混合,而不同字符类型的变量可以相互转换? 在C++中,为什么可以将未签名的char和有符号的char变量转换为彼此(实现当然是!?!),但是它们的指针不能相互转换?< /p>,c++,C++,我有没有遗漏一些非常基本的东西?如果我遗漏了一些非常明显的东西,很抱歉打扰你。我是一个相对较新的人,并试图提高自己。 注:在Stackoveflow上可能会有类似的问题,但由于网络连接速度慢,搜索非常痛苦,所以我只是问了问题本身。哦,但它们可以相互转换!你只需要一个相应的演员阵容。这种语言不会为你做这件事,因为将存储Foo的内存当作一个Bar来处理是desaster的一个诀窍。但是我不推荐它,因为在大多数情况下,使用正确的类型是更好的方法 对于整数之类的标量类型(各种字符类型都是整数!),转换通

我有没有遗漏一些非常基本的东西?如果我遗漏了一些非常明显的东西,很抱歉打扰你。我是一个相对较新的人,并试图提高自己。
注:在Stackoveflow上可能会有类似的问题,但由于网络连接速度慢,搜索非常痛苦,所以我只是问了问题本身。

哦,但它们可以相互转换!你只需要一个相应的演员阵容。这种语言不会为你做这件事,因为将存储Foo的内存当作一个Bar来处理是desaster的一个诀窍。但是我不推荐它,因为在大多数情况下,使用正确的类型是更好的方法


对于整数之类的标量类型(各种字符类型都是整数!),转换通常也是不可取的,但至少它不会以不同方式解释现有数据,而是从现有数据创建一个新对象。

当然可以更新。它最初编译为C,当时甚至不需要强制转换。我已经修改过了,所以它编译成C++(你可能会使用Cout)。
无法将指针变量转换为字符变量,因为指针仅包含变量的地址。
指针变量不能包含任何其他类型的数据。它们只能包含地址。

您可能误解了我的问题。我的目标不是将指针变量转换为字符变量。我只是想问为什么不可能把指针转换成不同的字符类型,而我们可以用变量来做同样的事情。@ UJJWalayi我做了一些修改,并且把它编译成C++。C++中使用C风格的代码总是有代码的味道,通常是令人沮丧的。UlrichEckhardt C++我把这个作为C回答,就像C标签被删除一样,然后在投诉后放入Casts。请添加注释来改进这个答案。根据C++,char是无符号字符或符号char中的一个。如果是这样的话,为什么隐式指针转换不能在char和其他两个变量之间进行呢?对不起,这是错误的
char
可以是有符号的,也可以是无符号的,但它仍然是与
signed char
unsigned char
不同的类型。但是,由于它与另一个字符类型兼容,它应该允许在两个匹配字符类型的指针之间进行转换?这将使程序根据
char
的符号进行编译,这通常是不好的。然而,要得到更明确的答案,我建议阅读“C++的设计和发展”(我想这就是它的名字)。谢谢你的回答。这对澄清云层有很大帮助。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char *sptr;
    unsigned char *uptr;
    sptr = (char*)malloc(100);
    strcpy(sptr, "One world");
    uptr = (unsigned char*)sptr;    // <--- works with a cast
    printf ("%s\n", uptr);
    free(sptr);
    return 0;
}
One world