11问答网
所有问题
c语言char和int可以互相赋值,但指针不能赋值,char *和int *不能直接赋值,为什么呢?谢谢
如题所述
举报该问题
推荐答案 2013-12-11
char 和 int 是通过ASCLL码相互赋值的 例如 a 以 %d 输出 则为97 以%c输出则为'a' char指针和int指针 之所以不能相互赋值是因为他们的长度不同 Tc 下 char 只有一个字节8个二进制位 而int 则是两个字节16个二进制位 由于指针所指向的是变量的起始地址 那么在当指针指向一段连续内存时 它找到每个变量是通过对起始地址运算得到的下一个元素的起始地址 然后根据长度 取出里面的内容 输出我们想要的格式 所以不同的类型长度不同 相互赋值 必定无法得到想要的结果 追问: char *a;int *b;a = b;这样编译不通过,a和b里都是地址,为什么不能赋值呢,而*a = *b可以 回答: a=b;这样的表达式是不对的,首先你的指针没有指向任何地址 *a=*b 是内容赋值 类型和ASCLL码之间转换是一样的 追问: char *a = NULL;int *b =NULL;a = b;这样也不对 回答: 指针相互赋值 必须类型相同 指针不能在没有指向时调用 给你打个比方吧 char *p 是认为在一段内存中8个二进制位是一个值 int *p 是认为在一段内存中16个二进制位是一个值 如果你把int 的指针地址给了char 结果char只取了8个二进制位 那么你说 这个值会和int取出来的一样吗?肯定是不一样的,所以不允许他们赋值,因为长度不同,如果类型相同,长度也就相同,赋值是没问题的 追问: 是不对,但编译不通过,long a;char b;b =a;这样长度也不同,但编译能通过,有警告conversion from 'long' to 'char', possible loss of datalong a;char b;b =a;编译不通过,有错误annot convert from 'long *' to 'char *'是不是指针特别,谢谢 回答: 这是赋值这种情况会有溢出的情况char 的范围 在无符号的情况下 是1-255 long 已经超出了这个范围 所以会有溢出 追问: 谢谢,还是有些迷糊,指针之间也是赋值,编译为啥错误呢,直接就编译不通过, 回答: 建议你先看一下基础知识 一般的C语言入门书 都会有 现在你知道他们的规则就足够了 如果需要知道的更多 你还需要去了解汇编之类的知识 提问者 的感言: 很好2012-06-03
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://11.wendadaohang.com/zd/22M8Mq7S87F4vqqMPS.html
其他回答
第1个回答 2019-05-04
因为char是1字节,而int一般是2或4字节,
char与int只在-128到+127之间时才等价,而int一般是+-3万左右,所以指针是不能等价的.
相似回答
C语言
里:
为什么不能
将
int
型变量
直接赋值
给指向int型变量的
指针
答:
因为指针里实际保存的是地址 比如
int
a = 0;int *p ;p = &a; //这是指向int型变量的
指针,
它保存的a这个变量所在的地址,比如,a保存在内存地址为0x00010011,那么p保存的就是0x00010011 所以
不能直接
把int型变量赋值给指针
大家正在搜
c语言char怎么赋值
c语言对char赋值
char相互赋值
char赋值给int
char型赋值给int型
int指针赋值
char数组怎么赋值
char类型变量怎么赋值
char怎么赋值
相关问题
c语言char和int可以互相赋值,但指针不能赋值,char...
c语言,int赋值给char
C语言指针的赋值问题
C语言里:为什么不能将int型变量直接赋值给指向int型变量...
c语言中指针变量为什么不能给int变量赋值
C语言中,字符串为什么不能直接用等于号赋值给一个变量。 例如...
C语言里:为什么不能将int型变量直接赋值给指向int型变量...
C语言用指针为申请空间赋值的问题