char指针和signed char指针 为何不能相互赋值

C语言 码拜 8年前 (2016-04-21) 1080次浏览
从网上收到一些理解:
1.char到底解释为 无符号还是有符号取决于编译器;
2.原因是int ,long 等C语言中已明确确定缺省情况下是有符号的,所以   int 指针和signed int指针可以相互赋值
在vs环境下,
char *var1;
signed char *var2 = var1;

signed char *var1;
char *var2 = var1;
都是无法编译通过的,问一下是为什么?
解决方案

30

引用:
Quote: 引用:

char到底解释为 无符号还是有符号取决于编译器
所以从语言角度来说,无法保证“signed char ”和“char”是同样的类型,也无法保证“signed char* ”和“char*”是同样的类型,语言层面上禁止这两类变量之间相互复制,很正常

signed char var1;
char var2 = var1;
为什么不是指针的赋值就可以编译通过呢?

原因是这个符合隐式转换条件,但不同类型的指针不符合

10

原因是 ASCII编码只有 127 以内的128 个
所以,开始的时候,char类型,就不需要 128 以上的编码
因此,不很重视 他是有符号,还是无符号
假如是 一开始,就超过128 估计就固定下来了
由于开始没固定,后来标准里面就没表态
然后就成现在这个样子,由实现决定。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明char指针和signed char指针 为何不能相互赋值
喜欢 (0)
[1034331897@qq.com]
分享 (0)